2013-10-23 17 views
6

tôi tạo một người dùng Firebird (Pippo) thông qua jaybird, sau gsec "hiển thị":dùng Firebird với đặc quyền được cấp không thể truy cập bảng

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

tôi tạo ra một vai trò (GESALLDB_USER) trong Firebird DB và cấp một số ưu đãi:

 
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> 

cấp vai trò này cho người dùng mới qua jaybird (dòng cuối cùng trước đó):

vấn đề là bất cứ khi nào tôi cố gắng chạy một truy vấn tôi nhận được thông báo:

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

Nếu tôi cấp trực tiếp BẢNG cho người dùng mới tạo, mọi thứ đều hoạt động.

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 

Bất kỳ trợ giúp về điều này?

Cảm ơn Gianluca.

Trả lời

7

Trong Firebird, các quyền được gán cho một vai trò chỉ được áp dụng khi vai trò đó được chỉ định khi kết nối với cơ sở dữ liệu. Nói cách khác, nếu người dùng có vai trò, người dùng đó sẽ không tự động nhận được quyền của vai trò đó. Người dùng cần chỉ rõ vai trò để sử dụng, nếu không chỉ các quyền được gán cho PUBLIC và chính người dùng đó sẽ áp dụng.

Đối ISQL các CONNECT specification là:

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

Vì vậy, ví dụ như sử dụng cụ thể của bạn: tên

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

Vai trò bao quanh bởi dấu ngoặc kép (đơn hoặc kép) đều được xử lý trường hợp nhạy cảm. Do đó, việc sử dụng role 'gesalldb_user' sẽ không khớp với vai trò GESALLDB_USER, trong khi role gesalldb_user sẽ. Điều này giống như các quy tắc cho các tên đối tượng được trích dẫn kép khác (như bảng và tên cột) trong Firebird.

Điều này cũng áp dụng khi sử dụng trình điều khiển hoặc thành phần truy cập, nhưng cấu hình chính xác và tên thuộc tính có thể thay đổi (ví dụ: đối với Jaybird, thuộc tính là roleName hoặc sqlRole).

+0

Thực hiện theo đề xuất kết quả tương tự: 'SQL> kết nối "c: \ users \ teiluke \ documents \ ondulati \ DB \ prova \ gesalldb.fdb" người dùng "pippo" password "topolino" role "gesalldb_user"; Phiên bản máy chủ: WI-V2.5.2.26540 Firebird 2.5 Cơ sở dữ liệu: "c: \ users \ teiluke \ documents \ ondulati \ db \ prova \ gesalldb.fdb", Người dùng: pippo, Vai trò: gesalldb_user SQL> chọn * từ anelli; Tuyên bố không thành công, SQLSTATE = 28000 không có quyền truy cập đọc/chọn vào BẢNG ANELLI SQL> hiển thị khoản trợ cấp; /* Cấp quyền cho cơ sở dữ liệu này */ . . . GRANT GESALLDB_USER ĐẾN PIPPO ' –

+0

@GianlucaPasqualato Lạ lùng, tôi sẽ cố gắng tái tạo điều này và xem tôi có bỏ sót bất cứ điều gì không. –

+0

@GianlucaPasqualato Tôi chỉ thử nghiệm nó, và vai trò là trường hợp nhạy cảm khi được bao quanh bởi (đơn hoặc đôi) báo giá, do đó, sử dụng 'vai trò' gesalldb_user'' không hoạt động, nhưng bằng cách sử dụng 'vai trò 'GESALLDB_USER'' hoặc' vai trò gesalldb_user' sẽ làm việc. –

Các vấn đề liên quan