2016-08-27 3 views
0

私は12cのOracleデータベースを持っています。私はCIDBADMINと呼ばれる管理者ユーザーを持っています。 私はこのユーザーを使ってデータベースにログインし、オブジェクトなどをSAMPLE_SCHEMAにインストールします。'変更されたスキーマ'で作成されたテーブルのテーブルのアクセス権

次のコード:

WHENEVER SQLERROR EXIT SQL.SQLCODE; 
SET SERVEROUTPUT on; 
ALTER SESSION SET CURRENT_SCHEMA=SAMPLE_SCHEMA; 

create table TESTTBL ("some_field" VARCHAR2(1024) NOT NULL); 

grant all on TESTTBL to CIDBADMIN; 

はエラーを与える:

Error starting at line : 7 in command - 
grant all on TESTTBL to CIDBADMIN 
Error report - 
SQL Error: ORA-01929: no privileges to GRANT 
01929. 00000 - "no privileges to GRANT" 
*Cause: "ALL" was specified but the user doesn't have any privileges 
      with the grant option. 
*Action: Don't grant privileges on that object. 
Commit 

私はこれを修正する方法を確認していません。私はドキュメントとgoogleをチェックして、これを修正するためにできることを解決できません。 SAMPLE_SCHEMAユーザーとしてデータベースにログインする必要のないソリューションが必要です。

編集001: 私は、sysdbaロールとしてCIDBADMINとしてログインすると、その権限を実行できることを確認しました。これは私の問題を解決しますが、私はCIDBADMINにこれを許可し、sysdbaとしてログオンする必要性を排除するために与えなければならない正確な権限を知りたいと思います。

+0

「管理者」ユーザーには、どの役割と特権が既にありますか? –

+0

スキーマを変更したにもかかわらず、ユーザーは変更されていません。 'sample_schema'' cidbadmin'ユーザにテーブルを作成していることを意味します。また、あなたは自分自身に特権を与えたり/取り消したりすることはできません。したがって、オブジェクトを作成した後、 'sample_schama'として接続しなければならず、' cidbadmin'ユーザにオブジェクト権限を与えることができます。 – JSapkota

+0

アレックス、私は必要な権限を管理者に与えることができます。私はすでにそれに膨大な金額を与えています。私はちょうどこれのために必要なのか知る必要があります。 Jaapkota、私はciマシンがすべてのスキーマのすべてのパスワードにアクセスできるようにしたくないので、sample_schemaとして接続するのは良い解決策ではありません。 – Robert3452

答えて

1

あなたがすでに付与されてきた役割と権限次の特定されていないが、create tableが動作している場合、あなたはおそらく、少なくとも行っている必要があります。

をあなたがを付与した場合

SQL> ALTER SESSION SET CURRENT_SCHEMA=SAMPLE_SCHEMA; 

Session altered. 

SQL> create table TESTTBL ("some_field" VARCHAR2(1024) NOT NULL); 

Table created. 

SQL> grant all on TESTTBL to CIDBADMIN; 
grant all on TESTTBL to CIDBADMIN 
      * 
ERROR at line 1: 
ORA-01929: no privileges to GRANT 

DBA> grant create any table to CIDBADMIN; 

は、あなたが示されてきた動作を確認しますあなたの管理者ユーザーに210特権:

DBA> grant grant any object privilege to CIDBADMIN; 

...あなたも、あなたの元のテーブルのグラントステップを試みたが、何を示してきたことは別のエラーを取得することができます

SQL> grant all on TESTTBL to CIDBADMIN; 
grant all on TESTTBL to CIDBADMIN 
         * 
ERROR at line 1: 
ORA-01749: you may not GRANT/REVOKE privileges to/from yourself 

私の知る限り「としてあなたが発見した場合を除いて、あなたのユーザにDBA権限を与えて、as sysdbaを接続しない限り、それを回避する手段はありません。

あなたはSAMPLE_SCHEMAアカウントのパスワードを知る必要がないようにしていると言いました。そうしないと、スキーマ所有者として直接接続し、そのスキーマに必要なものを作成できます。あなたがproxy authenticationであることを行うことができます。

DBA> alter user SAMPLE_SCHEMA grant connect through CIDBADMIN; 

次にあなたがCIDBADMINのパスワードを使用して、そのスキーマに接続し、current_schemaを設定しなくてもコマンドを実行できます。

SQL> connect CIDBADMIN[SAMPLE_SCHEMA]/cidbadmin_passwd; 
Connected. 
SQL> show user 
USER is "SAMPLE_SCHEMA" 
SQL> create table TESTTBL ("some_field" VARCHAR2(1024) NOT NULL); 

Table created. 

SQL> grant all on TESTTBL to CIDBADMIN; 

Grant succeeded. 

をあなたはSQLからプロキシ認証を使用することができます* Plus、またはJDBC経由(SQL Developerを含む)

とするとき、あなたがテーブルを参照することができ、再びあなたの管理者ユーザーとして背面接続:

SQL> connect CIDBADMIN/cidbadmin_passwd; 
Connected. 
SQL> show user 
USER is "CIDBADMIN" 
SQL> select owner from all_tables where table_name = 'TESTTBL'; 

OWNER 
------------------------------ 
SAMPLE_SCHEMA 

SQL> select * from SAMPLE_SCHEMA.TESTTBL; 

no rows selected 

このメカニズムでは、あなたのCIDBADMINユーザーに強力な(したがって、危険)の権限のいずれかを与える必要はありません。あなたは現在、オブジェクトを作成する必要があります。個々のスキーマ所有者は、独自のオブジェクトを作成するために必要な権限を必要とします(例えば、create table)。

0

solutionmustaccioからの助けを借り、あなたかもしれませ...

+0

このサイトの他の質問でも、リンクのみの回答は実際には承認されません。問題が実際に同じであった場合、この質問は重複としてフラグが立てられたり閉じたりする可能性があります。しかし、それは同じではありません。その答えはこの質問では使用されていない動的SQLの役割に関するものです。 –

関連する問題