2013-10-23 6 views
6

テーブルにアクセスすることはできません、gsecの「表示」を次のとおりです。Firebirdのユーザーは、私がjaybird経由Firebirdのユーザー(ピッポ)を作成し

問題は、私は、私がメッセージを持ってクエリを実行しようとしたときにということである:jaybirdを経由して、新しいユーザー(前の最後の行)にこのロールを付与

 
SQL> show grant; 

/* Grant permissions for this database */ 
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON ANELLI TO ROLE GESALLDB_USER 

GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON COPPIE TO ROLE GESALLDB_USER 

GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON COVE TO ROLE GESALLDB_USER 
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON DATI_CONFIGURAZIONE TO ROLE GESALLDB_USER 
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON DATI_COVE TO ROLE GESALLDB_USER 
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON DATI_SOGGETTI TO ROLE GESALLDB_USER 
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON DEPOSIZIONI TO ROLE GESALLDB_USER 
GRANT GESALLDB_USER TO PIPPO 
SQL> 
 
SQL> select * from anelli; 
Statement failed, SQLSTATE = 28000 
no permission for read/select access to TABLE ANELLI 
SQL> 

新たに作成されたユーザーにTABLEを直接付与すると、すべてが機能します。

SQL> grant all on anelli to pippo; 
SQL> show grant; 

/* Grant permissions for this database */ 
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON ANELLI TO ROLE GESALLDB_USER 

GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON ANELLI TO USER PIPPO 

SQL> connect "C:\Users\teiluke\Documents\Ondulati\DB\prova\gesalldb.fdb" user "p 
ippo" password "topolino"; 
Commit current transaction (y/n)?y 
Committing. 
Server version: 
WI-V2.5.2.26540 Firebird 2.5 
WI-V2.5.2.26540 Firebird 2.5/XNet (E7441EA1CA2CF4)/P12 
WI-V2.5.2.26540 Firebird 2.5/XNet (E7441EA1CA2CF4)/P12 
Database: "C:\Users\teiluke\Documents\Ondulati\DB\prova\gesalldb.fdb", User: pi 
ppo 
SQL> select * from anelli; 

PROGRESSIVO FEDERAZIONE RNA TIPO ANNO INIZIO FINE ATTIVA LAST_USED

============ =========== ====== ====== ====== ============ =============== =

 1 FOI   89LR E  2012    1   100 N 
     0 
     2 FOI   89LR E  2013    1   100 S 
    41 

これに関する助言?

ありがとうございました。

答えて

7

Firebirdでは、ロールに割り当てられた権限は、そのロールがデータベースに接続するときに指定された場合にのみ適用されます。つまり、ユーザーにロールがある場合、そのユーザーはそのロールの権利を自動的に取得しません。ユーザーは、使用する役割を明示的に指定する必要があります。そうでない場合は、PUBLICに割り当てられた権利とユーザー自身が適用されます。 ISQL CONNECT specificationについては

は次のとおりです。あなたの具体的な例を使用するので、

CONNECT database name [user username] [password password] [role role_name]; 

:(シングルまたはダブル)引用符で囲まれた

SQL> connect "C:\Users\teiluke\Documents\Ondulati\DB\prova\gesalldb.fdb" user "p 
ippo" password "topolino" role GESALLDB_USER; 

ロール名は大文字と小文字が区別扱われます。したがって、role 'gesalldb_user'を使用すると、ロールGESALLDB_USERと一致しません。一方、role gesalldb_userとなります。これは、Firebirdの他の二重引用符で囲まれたオブジェクト名(表や列名など)の規則に似ています。

これは、ドライバまたはアクセスコンポーネントを使用する場合にも適用されますが、正確な設定とプロパティ名は異なる場合があります(例:JaybirdのプロパティがroleNameまたはsqlRole)。

+0

'SQL> connect "c:¥users¥teiluke¥documents¥ondulati¥DB¥prova¥gesalldb.fdb"ユーザ "pippo"パスワード "topolino"ロール "gesalldb_user"; サーババージョン: WI-V2.5.2.26540 Firebird 2.5 データベース: "c:¥users¥teiluke¥documents¥ondulati¥db¥prova¥gesalldb.fdb"ユーザ:pippo、役割:gesalldb_user SQL> select * anelliから; 文が失敗しました。SQLSTATE = 28000 TABLE ANELLIへの読取り/選択アクセスの許可がありません SQL> show grant; /*このデータベースのアクセス許可を付与する*/ 。 。 。 ピポスに謝辞を送ってください。 ' –

+0

@GianlucaPasqualato奇妙なことに、私はこれを再現しようとしています。 –

+0

@GianlucaPasqualato私はちょうどそれをテストしました。役割は、(一重引用符または二重引用符で囲まれていると)大文字と小文字が区別されるため、 'role 'gesalldb_user''を使用すると動作しませんが、' role' GESALLDB_USER''または 'role gesalldb_user'働くでしょう。 –

関連する問題