powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / no permission for SELECT для view, хотя соотв. право дано РОЛИ, а роль грантована юзеру
10 сообщений из 10, страница 1 из 1
no permission for SELECT для view, хотя соотв. право дано РОЛИ, а роль грантована юзеру
    #38543617
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Вижу в 2.5 и 3.0 одинаковую печальку:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
-- вначале создаем объекты из-под sysdba:
SQL> create table topsecret(id int, x int, y int);
SQL> insert into topsecret values(1, 100, 200); commit;
SQL> create view v_secret as select * from topsecret; commit;
SQL> create role ro_secret;
SQL> create user john password '123'; commit;
SQL>  grant ro_secret to john ; commit;
SQL>  grant select on v_secret to ro_secret ; commit;

SQL> connect 'localhost/3333:/var/db/fb30/perf30.fdb' user 'john' password '123' role 'ro_secret';
Database:  'localhost/3333:/var/db/fb30/perf30.fdb',  User: john, Role: ro_secret 

SQL> select * from topsecret; -- это должно обломиться, тут всё ОК
Statement failed, SQLSTATE = 28000
no permission for SELECT access to TABLE TOPSECRET


SQL> select * from v_secret;
-- вот этот облом - отчего ? И почему 'TABLE', когда это VIEW ?
 Statement failed, SQLSTATE = 28000
no permission for SELECT access to TABLE V_SECRET
 
SQL> show grants;

/* Grant permissions for this database */
GRANT SELECT ON V_SECRET TO ROLE RO_SECRET
GRANT RO_SECRET TO JOHN

SQL> show view;
       V_SECRET
...
Рейтинг: 0 / 0
no permission for SELECT для view, хотя соотв. право дано РОЛИ, а роль грантована юзеру
    #38543637
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вьюхе грант не дать, как процедуре?
...
Рейтинг: 0 / 0
no permission for SELECT для view, хотя соотв. право дано РОЛИ, а роль грантована юзеру
    #38543649
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanА вьюхе грант не дать, как процедуре?не взлетело:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
$ /opt/fb30trnk/bin/isql localhost/3333:/var/db/fb30/perf30.fdb
Database:  localhost/3333:/var/db/fb30/perf30.fdb
SQL> revoke all on all from v_secret;
SQL> grant select on topsecret  to view  v_secret;
SQL> commit;
SQL> connect 'localhost/3333:/var/db/fb30/perf30.fdb' user 'john' password '123' role 'ro_secret';
Database:  'localhost/3333:/var/db/fb30/perf30.fdb', User: john, Role: ro_secret
SQL> show grants;

/* Grant permissions for this database */
GRANT SELECT ON TOPSECRET TO VIEW V_SECRET
GRANT SELECT ON V_SECRET TO ROLE RO_SECRET
GRANT RO_SECRET TO JOHN
SQL> select * from v_secret;
Statement failed, SQLSTATE = 28000
no permission for SELECT access to TABLE V_SECRET

И кажется, я знаю почему:
Код: plaintext
1.
2.
3.
4.
5.
SQL> set list on;
SQL> select current_user,current_role from rdb$database;

USER                            JOHN
ROLE                             NONE 

А вот как это обойти - не понимать:
Код: plaintext
1.
2.
3.
4.
5.
6.
SQL> grant  role  ro_secret to john;
Statement failed, SQLSTATE = 42000
Dynamic SQL Error
-SQL error code = -104
-Token unknown - line 1, column 12
-ro_secret
...
Рейтинг: 0 / 0
no permission for SELECT для view, хотя соотв. право дано РОЛИ, а роль грантована юзеру
    #38543674
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то вечер перестаёт быть томным.
Вот на продакшене, где ФБ уже хз сколько месяцев не менялся:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$ /opt/firebird/bin/isql localhost/3050:/var/db/firebird/test.fdb -user sysdba -pas ****** -role rdb\$admin
Database:  localhost/3050:/var/db/firebird/test.fdb, User: sysdba, Role:  RDB$ADMIN 
SQL> set list on; select current_user,current_role from rdb$database;

USER                            SYSDBA
ROLE                             NONE 


SQL> show version;
ISQL Version: LI-V2.5.3.26546 Firebird 2.5
Server version:
Firebird/linux AMD64 (access method), version "LI-V2.5.3.26546 Firebird 2.5"

Что там с current_role происходит ?
...
Рейтинг: 0 / 0
no permission for SELECT для view, хотя соотв. право дано РОЛИ, а роль грантована юзеру
    #38543679
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид
Код: plaintext
V2.5.3.26546

На 2.5.1.26351 все нормально. Роль отображается. :)
...
Рейтинг: 0 / 0
no permission for SELECT для view, хотя соотв. право дано РОЛИ, а роль грантована юзеру
    #38543705
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При коннекте роль в верхнем регистре пробуй.
isql про юзера и роль тупо показывает то, что ты ему передал в ком. строке, а не то, что принял\назначил сервер
...
Рейтинг: 0 / 0
no permission for SELECT для view, хотя соотв. право дано РОЛИ, а роль грантована юзеру
    #38543709
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

не пугай так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect 'localhost:horses' user 'sysdba' password 'masterkey' role 'RDB$ADM
IN';
Database:  'localhost:horses', User: sysdba, Role: 'RDB$ADMIN'
SQL> set list on;
SQL> select current_user, current_role from rdb$database;

USER                            SYSDBA
ROLE                            NONE


SQL> show role;
There are no roles in this database
SQL> create role myrole;
SQL> create user myuser password '1';
SQL> grant myrole to myuser;
SQL> connect 'localhost:horses' user 'myuser' password '1' role 'myrole';
Commit current transaction (y/n)?y
Committing.
Database:  'localhost:horses', User: myuser, Role: MYROLE
SQL> show role;
       MYROLE
SQL> select current_user, current_role from rdb$database;

USER                            MYUSER
ROLE                            MYROLE


SQL> connect 'localhost:horses' user 'sysdba' password 'masterkey' role 'RDB$ADM
IN';
Commit current transaction (y/n)?y
Committing.
Database:  'localhost:horses', User: sysdba, Role: RDB$ADMIN
SQL> grant rdb$admin to myuser;
SQL> connect 'localhost:horses' user 'myuser' password '1' role 'rdb$admin';
Commit current transaction (y/n)?y
Committing.
Database:  'localhost:horses', User: myuser, Role: RDB$ADMIN
SQL> show role;
       MYROLE
SQL> select current_user, current_role from rdb$database;

USER                            MYUSER
ROLE                            RDB$ADMIN


SQL> show version;
ISQL Version: WI-V2.5.3.26736 Firebird 2.5
Server version:
Firebird/x86-64/Windows NT (access method), version "WI-V2.5.3.26736 Firebird 2.5"
Firebird/x86-64/Windows NT (remote server), version "WI-V2.5.3.26736 Firebird 2.5/tcp (station9)/P12
"
Firebird/x86-64/Windows NT (remote interface), version "WI-V2.5.3.26736 Firebird 2.5/tcp (station9)/
P12"
on disk structure version 11.2
SQL>
...
Рейтинг: 0 / 0
no permission for SELECT для view, хотя соотв. право дано РОЛИ, а роль грантована юзеру
    #38543750
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladПри коннекте роль в верхнем регистре пробуй.помогло, спс!
hvladisql про юзера и роль тупо показывает то, что ты ему передал в ком. строке, а не то, что принял\назначил серверда, это я уже давно знаю :-)
Странно, что роль case-sens - это же не пароль, а просто "должностные полномочия".
...
Рейтинг: 0 / 0
no permission for SELECT для view, хотя соотв. право дано РОЛИ, а роль грантована юзеру
    #38543757
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидСтранно, что роль case-sens - это же не пароль, а просто "должностные полномочия".
+1 во всех соединениях в эксперте роль в нижнем регистре. В своем ПО - аналогично и как-то работает.
...
Рейтинг: 0 / 0
no permission for SELECT для view, хотя соотв. право дано РОЛИ, а роль грантована юзеру
    #38543771
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BTW, права вьюхе давать необязательно, и так всё селектится:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
-- as sysdba:
SQL> revoke all on all from view v_secret;
SQL> commit; quit;

$ /opt/fb30trnk/bin/isql localhost/3333:/var/db/fb30/perf30.fdb -user john -pas 123 O_SECRET
Database:  localhost/3333:/var/db/fb30/perf30.fdb, User: john, Role: RO_SECRET
SQL> show grants;

/* Grant permissions for this database */
GRANT SELECT ON V_SECRET TO ROLE RO_SECRET
GRANT RO_SECRET TO JOHN
SQL> select * from v_secret;

          ID            X            Y
============ ============ ============
           1          100          200

SQL> set list on; select current_user, current_role from rdb$database;

USER                            JOHN
ROLE                            RO_SECRET
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / no permission for SELECT для view, хотя соотв. право дано РОЛИ, а роль грантована юзеру
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]