Oracle 11gでユーザーを作成し、権限を付与する方法


80

Oracle 11gでユーザーを作成し、そのユーザーに1つの特定のストアドプロシージャとそのプロシージャ内のテーブルのみを実行する機能のみを付与する方法について誰かにアドバイスしてもらえますか。

どうすればいいのかよくわかりません!

回答:


86

SYSTEMとして接続します。

CREATE USER username IDENTIFIED BY apassword;

GRANT CONNECT TO username;

GRANT EXECUTE on schema.procedure TO username;

次のことも必要になる場合があります。

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

プロシージャが使用するテーブル。


6
+1ただし、Oracleのバージョンによっては、CONNECTロールには名前が示すよりもはるかに多くの権限があります。CREATE SESSION代わりに許可したいと思います。
ジャスティン洞窟

私が使用していたバージョンは11グラムである
Andy5


3
どのテーブルでも、選択、挿入、更新、または削除を許可する必要はありません。プロシージャを使用するポイントの1つは、テーブルを「許可されていない」状態に保ち、プロシージャレベルでテーブルへのアクセスを制御できるようにすることです。
Dawood ibn Kareem 2013

3
"schema.procedure TOusernameの実行を許可します。" 「1行目のエラー:ORA-04042:プロシージャ、関数、パッケージ、またはパッケージ本体が存在しません」というエラーを返しています
Tasdik Rahman 2015

25

Oracleでユーザーを作成するには、以下の手順に従います。
-システムユーザーとして接続します

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

-ユーザークエリを作成します

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

-役割を提供する

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

-特権を提供する

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

-テーブルへのアクセスを提供します。

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

Oracle 11gでは、「grantdba」または「grandsysdba」ですか?
jondinham 2014

2
ORA-00990: 'GRANT CREATE SESSION GRANT ANY PRIVILEGE TO <USERNAME>;'の権限が欠落しているか無効です。
Nicolas Mommaerts 2014年

4
セッション後はコンマが必要です
Karthik Prasad 2014

2
'-特権の提供'行には、ここにカンマを追加する必要があります:GRANT CREATE SESSION、GRANT ANY PRIVILEGE TO <USER NAME>; 私はこれを編集しましたが、何らかの理由で拒否されました。
ghost_1989 2016年


21

Oracleのドキュメントは包括的で、オンラインで無料です。あなたはそれを使うことを学ぶべきです。CREATE USERの構文はここにあり、GRANTの構文はここにあります

データベースに接続するには、ユーザーにCREATESESSION特権を付与する必要があります。

ストアドプロシージャで新しいユーザー権限を許可するには、EXECUTE権限を付与する必要があります。付与者は、次のいずれかである必要があります。

  • プロシージャの所有者
  • WITHADMINオプションを使用してそのプロシージャの実行を許可されたユーザー
  • GRANT ANYOBJECT権限を持つユーザー
  • DBAまたはその他のスーパーユーザーアカウント。

通常、ストアドプロシージャを使用するために、ストアドプロシージャで使用されるオブジェクトに権限を付与する必要はないことに注意してください。デフォルトの権限では、プロシージャの所有者と同じ権限でプロシージャを実行し、いわば、プロシージャの実行時に権限を継承します。これはAUTHID句でカバーされています。デフォルトは定義者(つまり、プロシージャの所有者)です。AUTHIDがCURRENT_USER(呼び出し側、つまり新しいユーザー)に設定されている場合にのみ、プロシージャで使用されるオブジェクトに対する権限を付与する必要があります。 詳細をご覧ください


10

TESTやPRODなどの重要な環境ではこれらのアプローチを使用しないでください。以下の手順は、ローカル環境向けに提案されています。私のローカルホストの場合、次の手順でユーザーを作成します。

重要な注意: SYSTEMユーザー資格情報を使用してユーザーを作成してください。そうしないと、同じデータベースで複数のアプリケーションを実行するときに問題が発生する可能性があります。

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

次に、以下のスクリプトを実行します

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

編集:オラクルora-28001に関する問題に直面した場合、パスワードの有効期限が切れています。これも実行すると便利です。

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


4

コメントで何度も言及したように、OracleCONNECTでは、RESOURCEおよびDBAロールの使用を推奨していません。

自分のロールとこのロールを与えられたユーザーを作成するには、SYSとして接続する必要があります。必要に応じて、SQLDeveloperまたはSQL * Plusを使用できます。ログオン文字列にSYSDBAの役割を記載することを忘れないでください。connect_identifier異なる構文を使用しています。

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

「OracleTechnologyNetwork DeveloperDay」でVMとして提供されているような12cR1があるとします。接続文字列は次のようになります(提供された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

Unixでは、引用符はエスケープする必要があることに注意してください。エスケープしないと、シェルによって消費されます。したがって、に"なり\"ます。

次に、役割を作成し、MYROLE他の役割または特権を付与します。私は何か面白いことをするためにほぼ最低限を追加しました:

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

次に、ユーザーを作成しますMYUSERidentified byパスワードに続く文字列では、大文字と小文字が区別されます。残りはそうではありません。"大文字に変換され、いくつかの制限がある通常の識別子の代わりに、SQLで区切られた識別子(引用符で囲まれている)を使用することもできます。クォータはのunlimited代わりになり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;

最終的には、新しいユーザーとして接続します。

デフォルトのプロファイルを変更したり、別のプロファイルを提供して、パスワードの有効期限、許可されたログイン試行の失敗回数など、一部の設定をカスタマイズすることもできます。


2

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これはGoogleでの上位の結果の1つですが、可能な限り最悪のアドバイスです。この例では、ユーザーを完全な特権を持つdbaにします。これは「データベースの制御を放棄する方法」です
Devon_C_Miller 2018年

0

最初の一歩:

Connect to a database using System/Password;

第二段階:

パスワードで識別されるユーザーユーザー名を作成します。(構文)

Ex: create user manidb idntified by mypass;

3番目のステップ:

接続、リソースをユーザー名に付与します。(構文)

Ex: grant connect,resource to manidb;


-2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.