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ć!
Odpowiedzi:
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.
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>;
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:
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 .
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
Jak wcześniej wspomniano wielokrotnie w komentarzach, do używania CONNECT
, RESOURCE
aDBA
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_identifier
Wykorzystuje 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/oracle@127.0.0.1/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ę MYROLE
i 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 by
któ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ć unlimited
zamiast 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.
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 /
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;
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;
CONNECT
rola ma jednak znacznie więcej uprawnień, niż sugeruje nazwa. ZamiastCREATE SESSION
tego wolałbym przyznać .