2013-10-23 3 views
6

मैं jaybird के माध्यम से एक Firebird उपयोगकर्ता (Pippo) बनाया उपयोग नहीं कर सकते, इस प्रकार GSEC "प्रदर्शन":Firebird उपयोगकर्ता टेबल

 
GSEC> di 
    user name     uid gid admin  full name 
------------------------------------------------------------------------------------------------ 
SYSDBA        0  0   Sql Server Administrator 
PIPPO        0  0   GesAll 1.0 User 
GSEC> 

मैं Firebird डीबी में एक भूमिका (GESALLDB_USER) बना सकते हैं और कुछ विशेषाधिकार प्रदान:

 
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> 

jaybird के माध्यम से नए उपयोगकर्ता को यह भूमिका (अंतिम पंक्ति से पहले) दी:

समस्या यह है कि मैं संदेश मिला जब भी मैं एक क्वेरी चलाने के लिए प्रयास करें:

 
SQL> select * from anelli; 
Statement failed, SQLSTATE = 28000 
no permission for read/select access to TABLE ANELLI 
SQL> 

यदि मैं सीधे नव निर्मित उपयोगकर्ता को टेबल प्रदान करता हूं तो सब कुछ काम करता है।

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 आरएनए TIPO ANNO INIZIO फाइन 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 होगा। यह फायरबर्ड में अन्य डबल उद्धृत ऑब्जेक्टनामों (जैसे टेबल और कॉलमनाम) के नियमों की तरह है।

यह ड्राइवर या एक्सेस घटक का उपयोग करते समय भी लागू होता है, लेकिन सटीक कॉन्फ़िगरेशन और संपत्ति का नाम भिन्न हो सकता है (उदाहरण के लिए जेबर्ड के लिए संपत्ति roleName या sqlRole) है।

+0

सुझाए गए समान परिणाम के रूप में संपन्न: 'एसक्यूएल> कनेक्ट "सी: \ उपयोगकर्ता \ teiluke \ दस्तावेज़ \ ondulati \ DB \ prova \ gesalldb.fdb" उपयोगकर्ता "पिप्पो" पासवर्ड "topolino" भूमिका "gesalldb_user"; सर्वर संस्करण: वाई-V2.5.2.26540 Firebird 2.5 डेटाबेस: "c: \ उपयोगकर्ताओं \ teiluke \ दस्तावेज \ ondulati \ db \ Prova \ gesalldb.fdb", उपयोगकर्ता: pippo, भूमिका: gesalldb_user एसक्यूएल> का चयन करें * एनेली से; वक्तव्य में विफल SQLSTATE = 28000 टेबल ANELLI एसक्यूएल> शो अनुदान के लिए पढ़ने/चयन के उपयोग के लिए कोई अनुमति; /* इस डेटाबेस के लिए अनुदान अनुमतियां */ । । । अनुदान GESALLDB_USER से PIPPO ' –

+0

@GianlucaPasqualato अजीब, मैं इसे पुन: पेश करने की कोशिश करूंगा और देख सकता हूं कि मुझे कुछ याद आया या नहीं। –

+0

@GianlucaPasqualato मैंने अभी इसका परीक्षण किया है, और जब भूमिका (सिंगल या डबल) उद्धरणों से घिरा हुआ है तो भूमिका केस संवेदनशील होती है, इसलिए 'भूमिका' gesalldb_user'' का उपयोग करना काम नहीं करता है, लेकिन 'भूमिका' GESALLDB_USER'' या 'role gesalldb_user' काम करेगा। –

संबंधित मुद्दे