Jak utworzyć użytkownika w Oracle 11g i przyznać uprawnienia

80

Czy ktoś może mi doradzić, jak utworzyć użytkownika w Oracle 11g i przyznać temu użytkownikowi tylko możliwość wykonywania tylko jednej określonej procedury składowanej i tabel w tej procedurze.

Nie bardzo wiem, jak to zrobić!

Andy5
źródło

Odpowiedzi:

86

Połącz jako SYSTEM.

CREATE USER username IDENTIFIED BY apassword;

GRANT CONNECT TO username;

GRANT EXECUTE on schema.procedure TO username;

Konieczne może być również:

GRANT SELECT [, INSERT] [, UPDATE] [, DELETE] on schema.table TO username;

do dowolnej tabeli, z której korzysta procedura.

cagcowboy
źródło
6
+1 W zależności od wersji Oracle, CONNECTrola ma jednak znacznie więcej uprawnień, niż sugeruje nazwa. Zamiast CREATE SESSIONtego wolałbym przyznać .
Justin Cave,
Wersja, której używam, to 11g
Andy5,
3
Nie powinieneś być zmuszony do wybierania, wstawiania, aktualizowania lub usuwania w żadnej z tabel. Jednym z punktów korzystania z procedur jest możliwość utrzymywania tabel „nieprzydzielonych” i kontrolowanie dostępu do nich na poziomie procedury.
Dawood ibn Kareem
3
„GRANT EXECUTE na schema.procedure TO nazwa użytkownika;” zwraca komunikat o błędzie „BŁĄD w linii 1: ORA-04042: procedura, funkcja, pakiet lub
treść
25

Wykonaj poniższe kroki, aby utworzyć użytkownika w Oracle.
- Połącz się jako użytkownik systemu

CONNECT <USER-NAME>/<PASSWORD>@<DATABASE NAME>;

- Utwórz zapytanie użytkownika

CREATE USER <USER NAME> IDENTIFIED BY <PASSWORD>;

- Zapewnij role

GRANT CONNECT,RESOURCE,DBA TO <USER NAME>;

- Zapewnij przywileje

GRANT CREATE SESSION, GRANT ANY PRIVILEGE TO <USER NAME>;
GRANT UNLIMITED TABLESPACE TO <USER NAME>;

- Zapewnij dostęp do tabel.

GRANT SELECT,UPDATE,INSERT ON <TABLE NAME> TO <USER NAME>;
Sanoop
źródło
w Oracle 11g, czy jest to „grant dba” czy „grand sysdba”?
jondinham
2
ORA-00990: brak lub unieważnienie uprawnienia do nadawania uprawnień „GRANT CREATE SESSION GRANT ANY PRIVILEGE TO <USER NAME>;”
Nicolas Mommaerts
4
przecinek powinien być tam po sesji
Karthik Prasad
2
Wiersz „--Provide privileges” wymaga dodania przecinka: GRANT CREATE SESSION, GRANT ANY PRIVILEGE TO <USER NAME>; Edytowałem to, ale z jakiegoś powodu zostałem odrzucony.
ghost_1989
21

Dokumentacja Oracle jest kompleksowa, dostępna online i bezpłatna. Powinieneś nauczyć się go używać. Składnię CREATE USER znajdziesz tutaj, a GRANT tutaj ,

Aby połączyć się z bazą danych musimy nadać użytkownikowi uprawnienie CREATE SESSION .

Aby zezwolić na nowe prawa użytkownika w procedurze składowanej, musimy przyznać uprawnienie EXECUTE. Koncesjodawcą musi być jeden z tych podmiotów:

  • właściciel procedury
  • użytkownik przyznał wykonanie tej procedury z opcją Z ADMINISTRATOREM
  • użytkownik z uprawnieniem GRANT ANY OBJECT
  • DBA lub inne konto superużytkownika.

Należy zauważyć, że normalnie nie musielibyśmy nadawać praw do obiektów używanych przez procedurę składowaną, aby móc z niej korzystać. Domyślnym uprawnieniem jest to, że wykonujemy procedurę z takimi samymi prawami, jak właściciel procedury i niejako dziedziczymy ich prawa podczas wykonywania procedury. Jest to objęte klauzulą ​​AUTHID. Wartość domyślna to definer (tj. Właściciel procedury). Tylko jeśli AUTHID jest ustawiony na CURRENT_USER (wywołujący, czyli nasz nowy użytkownik), musimy nadać uprawnienia obiektom używanym przez procedurę. Dowiedz się więcej .

APC
źródło
10

Nie używaj tego podejścia w krytycznych środowiskach, takich jak TEST i PROD. Poniższe kroki są tylko sugerowane dla środowiska lokalnego. Dla mojego hosta lokalnego tworzę użytkownika w następujący sposób:

WAŻNA UWAGA: Utwórz użytkownika z poświadczeniami użytkownika SYSTEM, w przeciwnym razie możesz napotkać problem podczas uruchamiania wielu aplikacji na tej samej bazie danych.

 CONNECT SYSTEM/<<System_User_Password>>@<<DatabaseName>>; -- connect db with username and password, ignore if you already connected to database.

Następnie uruchom poniższy skrypt

CREATE USER <<username>> IDENTIFIED BY <<password>>; -- create user with password
GRANT CONNECT,RESOURCE,DBA TO <<username>>; -- grant DBA,Connect and Resource permission to this user(not sure this is necessary if you give admin option)
GRANT CREATE SESSION TO <<username>> WITH ADMIN OPTION; --Give admin option to user
GRANT UNLIMITED TABLESPACE TO <<username>>; -- give unlimited tablespace grant

EDYCJA: Jeśli napotkasz problem dotyczący oracle ora-28001, hasło wygasło, również może to być przydatne, uruchom

select * from dba_profiles;-- check PASSWORD_LIFE_TIME 
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; -- SET IT TO UNLIMITED
erhun
źródło
4

Jak wcześniej wspomniano wielokrotnie w komentarzach, do używania CONNECT, RESOURCEaDBA role jest odradzane przez Oracle.

Musisz połączyć się jako SYS, aby utworzyć swoją rolę i użytkowników, którym przypisano tę rolę. Możesz używać SQL Developer lub SQL * Plus według własnego uznania. Nie zapomnij wspomnieć o roli SYSDBA w ciągu logowania. connect_identifierWykorzystuje różne składnie.

sqlplus sys/<<password>>@<<connect_identifier>> as sysdba

Załóżmy, że masz model 12cR1, taki jak ten dostarczony jako maszyna wirtualna podczas „ Dnia programisty sieci Oracle Technology Network ”. Ciągi połączenia mogą być (do połączenia z dostarczonym PDB):

sqlplus sys/[email protected]/orcl as sysdba
sqlplus sys@"127.0.0.1/orcl" as sysdba -- to avoid putting the pw in clear

Zwróć uwagę, że pod Uniksem cudzysłowy muszą zostać zmienione, w przeciwnym razie zostaną zużyte przez powłokę. Tak "się stanie \".

Następnie tworzysz rolę MYROLEi nadajesz jej inne role lub uprawnienia. Dodałem prawie absolutne minimum, aby zrobić coś ciekawego:

create role myrole not identified;
grant create session to myrole;
grant alter session to myrole;
grant create table to myrole;

Następnie utwórz użytkownika MYUSER. W ciągu, po identified byktórym następuje hasło, rozróżniana jest wielkość liter. Reszta nie jest. Możesz również użyć identyfikatorów rozdzielanych SQL (w cudzysłowach ") zamiast zwykłych identyfikatorów, które są konwertowane na wielkie litery i podlegają kilku ograniczeniom. Limit mógłby być unlimitedzamiast 20m.

create user myuser identified by myuser default tablespace users profile default account unlock;
alter user myuser quota 20m on users;
grant myrole to myuser;

W końcu łączysz się jako nowy użytkownik.

Pamiętaj, że możesz również zmienić domyślny profil lub podać inny, aby dostosować niektóre ustawienia, takie jak okres ważności haseł, liczba dozwolonych nieudanych prób logowania itp.

Ludovic Kuty
źródło
2
CREATE USER USER_NAME IDENTIFIED BY PASSWORD;
GRANT CONNECT, RESOURCE TO USER_NAME;
SREE
źródło
0
CREATE USER books_admin IDENTIFIED BY MyPassword;
GRANT CONNECT TO books_admin;
GRANT CONNECT, RESOURCE, DBA TO books_admin;
GRANT CREATE SESSION GRANT ANY PRIVILEGE TO books_admin;
GRANT UNLIMITED TABLESPACE TO books_admin;
GRANT SELECT, INSERT, UPDATE, DELETE ON schema.books TO books_admin;

https://docs.oracle.com/cd/B19306_01/network.102/b14266/admusers.htm#i1006107 https://chartio.com/resources/tutorials/how-to-create-a-user-and-grant -permissions-in-oracle /

Md Nazrul Islam
źródło
-1 To jeden z najlepszych wyników w Google, ale to najgorsza z możliwych rada. W tym przykładzie użytkownik jest dba z pełnymi uprawnieniami. To jest „Jak przekazać kontrolę nad bazą danych”
Devon_C_Miller
0

Pierwszy krok:

Connect to a database using System/Password;

drugi krok:

utworzyć nazwę użytkownika identyfikowaną hasłem; (składnia)

Ex: create user manidb idntified by mypass;

trzeci krok:

grant connect, zasób dla nazwy użytkownika; (Składnia)

Ex: grant connect,resource to manidb;

Manideep
źródło
-2
  • krok 1 .

    create user raju identified by deshmukh;

  • krok 2.

    grant connect , resource to raju;

  • krok 3.

    grant unlimitted tablespace to raju;

  • krok 4.

    grant select , update , insert , alter to raju;

raju deshmukh
źródło