So erstellen Sie einen Benutzer in Oracle 11g und erteilen Berechtigungen


80

Kann mich jemand beraten, wie man einen Benutzer in Oracle 11g erstellt und diesem Benutzer nur die Möglichkeit gibt, nur eine bestimmte gespeicherte Prozedur und die Tabellen in dieser Prozedur auszuführen.

Ich bin mir nicht sicher, wie ich das machen soll!

Antworten:


86

Als SYSTEM verbinden.

CREATE USER username IDENTIFIED BY apassword;

GRANT CONNECT TO username;

GRANT EXECUTE on schema.procedure TO username;

Möglicherweise müssen Sie auch:

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

zu welchen Tabellen die Prozedur verwendet.


6
+1 Abhängig von der Oracle-Version verfügt die CONNECTRolle jedoch über viel mehr Berechtigungen als der Name vermuten lässt. Ich würde CREATE SESSIONstattdessen viel lieber gewähren .
Justin Cave

Die Version, die ich benutze, ist 11g
Andy5


3
Sie sollten in keiner der Tabellen das Auswählen, Einfügen, Aktualisieren oder Löschen gewähren müssen. Einer der Punkte bei der Verwendung von Prozeduren besteht darin, dass Sie Ihre Tabellen "nicht zugeteilt" lassen und den Zugriff auf sie auf Prozedurebene steuern können.
Dawood ibn Kareem

3
"GRANT EXECUTE für schema.procedure TO Benutzername;" gibt einen Fehler zurück, der besagt "FEHLER in Zeile 1: ORA-04042: Prozedur, Funktion, Paket oder
Paketkörper

25

Führen Sie die folgenden Schritte aus, um einen Benutzer in Oracle zu erstellen.
--Verbinden Sie sich als Systembenutzer

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

- Benutzerabfrage erstellen

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

- Rollen bereitstellen

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

--Berechtigungen bereitstellen

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

--Bieten Sie Zugriff auf Tabellen.

GRANT SELECT,UPDATE,INSERT ON <TABLE NAME> TO <USER NAME>;

Ist es in Oracle 11g "grant dba" oder "grand sysdba"?
Jondinham

2
ORA-00990: Fehlende oder ungültige Berechtigung für 'GRANT CREATE SESSION GRANT ANY PRIVILEGE TO <BENUTZERNAME>;'
Nicolas Mommaerts

4
Nach der Sitzung sollte ein Komma vorhanden sein
Karthik Prasad

2
Die Zeile '--Provide privileges' muss hier mit einem Komma versehen werden: GRANT CREATE SESSION, GRANT ANY PRIVILEGE TO <BENUTZERNAME>; Ich habe dies bearbeitet, wurde aber aus irgendeinem Grund abgelehnt.
Ghost_1989


21

Die Oracle-Dokumentation ist umfassend, online und kostenlos. Sie sollten lernen, es zu benutzen. Die Syntax für CREATE USER finden Sie hier und für GRANT hier .

Um eine Verbindung zur Datenbank herzustellen, müssen wir einem Benutzer das Privileg CREATE SESSION erteilen .

Um die neuen Benutzerrechte für eine gespeicherte Prozedur zuzulassen, müssen wir das EXECUTE-Privileg gewähren. Der Stipendiat muss einer von diesen sein:

  • der Prozedurinhaber
  • Ein Benutzer, dem die Ausführung dieser Prozedur mit der Option WITH ADMIN gewährt wurde
  • ein Benutzer mit der Berechtigung GRANT ANY OBJECT
  • ein DBA oder ein anderes Superuser-Konto.

Beachten Sie, dass wir normalerweise keine Rechte für Objekte gewähren müssen, die von einer gespeicherten Prozedur verwendet werden, um die Prozedur zu verwenden. Die Standardberechtigung besteht darin, dass wir die Prozedur mit denselben Rechten wie der Prozedureigentümer ausführen und ihre Rechte bei der Ausführung der Prozedur sozusagen erben. Dies wird durch die AUTHID-Klausel abgedeckt. Der Standardwert ist definer (dh Prozedureigentümer). Nur wenn die AUTHID auf CURRENT_USER (der Aufrufer, das ist unser neuer Benutzer) gesetzt ist, müssen wir Rechte für Objekte gewähren, die von der Prozedur verwendet werden. Erfahren Sie mehr .


10

Verwenden Sie diesen Ansatz nicht in kritischen Umgebungen wie TEST und PROD. Die folgenden Schritte werden nur für die lokale Umgebung vorgeschlagen. Für meinen localhost erstelle ich den Benutzer über folgende Schritte:

WICHTIGER HINWEIS: Erstellen Sie Ihren Benutzer mit SYSTEM-Benutzeranmeldeinformationen. Andernfalls können Probleme auftreten, wenn Sie mehrere Anwendungen in derselben Datenbank ausführen.

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

Führen Sie dann das folgende Skript aus

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

BEARBEITEN: Wenn Sie ein Problem mit Oracle ora-28001 haben, ist das Passwort abgelaufen. Dies kann auch eine nützliche Ausführung sein

select * from dba_profiles;-- check PASSWORD_LIFE_TIME 
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; -- SET IT TO UNLIMITED


4

Wie bereits mehrfach in den Kommentaren, die Verwendung der erwähnten CONNECT, RESOURCEund DBARollen , die von Oracle abgeraten.

Sie müssen sich als SYS verbinden, um Ihre Rolle und die Benutzer zu erstellen, denen diese Rolle zugewiesen wurde. Sie können SQL Developer oder SQL * Plus nach Belieben verwenden. Vergessen Sie nicht, die SYSDBA-Rolle in der Anmeldezeichenfolge anzugeben. Das connect_identifierverwendet unterschiedliche Syntaxen.

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

Angenommen, Sie haben einen 12cR1 wie den, der als VM mit dem " Oracle Technology Network Developer Day " bereitgestellt wird . Die Verbindungszeichenfolgen könnten sein (um eine Verbindung zum bereitgestellten PDB herzustellen):

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

Beachten Sie, dass unter Unix die Anführungszeichen maskiert werden müssen, da sie sonst von der Shell verwendet werden. So "wird \".

Anschließend erstellen Sie die Rolle MYROLEund gewähren ihr andere Rollen oder Berechtigungen. Ich habe fast das Nötigste hinzugefügt, um etwas Interessantes zu tun:

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

Als nächstes erstellen Sie den Benutzer MYUSER. Die folgende Zeichenfolge, identified bydie das Kennwort ist, unterscheidet zwischen Groß- und Kleinschreibung. Der Rest ist nicht. Sie können auch SQL-getrennte Bezeichner (umgeben von Anführungszeichen ") anstelle von regulären Bezeichnern verwenden, die in Großbuchstaben konvertiert werden und einigen Einschränkungen unterliegen. Die Quote könnte unlimitedstattdessen sein 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;

Schließlich verbinden Sie sich als Ihr neuer Benutzer.

Bitte beachten Sie, dass Sie auch das Standardprofil ändern oder ein anderes angeben können, um einige Einstellungen wie die Ablaufdauer von Kennwörtern, die Anzahl der zulässigen fehlgeschlagenen Anmeldeversuche usw. anzupassen.



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 /


-1 Dies ist eines der Top-Ergebnisse bei Google, aber es ist der schlechteste Ratschlag. In diesem Beispiel wird der Benutzer zu einer Datenbank mit allen Berechtigungen. Dies ist "Wie Sie die Kontrolle über Ihre Datenbank
abgeben

0

Erster Schritt:

Connect to a database using System/Password;

zweiter Schritt:

Erstellen Sie einen Benutzernamen, der durch ein Passwort identifiziert wird. (Syntax)

Ex: create user manidb idntified by mypass;

dritter Schritt:

Gewähren Sie Connect, Ressource für Benutzername. (Syntax)

Ex: grant connect,resource to manidb;


-2
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.