Страница 1 из 1

роли соединение и доступ к таблице

Добавлено: 18 окт 2012, 16:50
zva
Имеется пользователь testuser.
Create role myrole;
Commit;
Grant all on test to myrole;
Grant myrole to testuser;
Connect ‘d:\basaOfData\bd.gdb’ user ‘testuser’ password ‘test’ role ‘myrole’;
Database: ‘d:\basaOfData\bd.gdb’, user testuser, role: myrole
Select * from test;

Statement failed, SQLCODE = -551

no permission for read/select access to table TEST

Выполнив запрос от sysdba

Select rdb@privilege, rdb@user from rdb$user_privileges where rdb$user = ‘TESTUSER’;

Получаю : M TESTUSER


Выполнив запрос от sysdba

Select rdb@privilege, rdb@user from rdb$user_privileges where rdb$user = ‘MYROLE’;

Получаю :
S MYROLE
U MYROLE
I MYROLE
D MYROLE
R MYROLE

почему нет разрешения?

Re: роли соединение и доступ к таблице

Добавлено: 18 окт 2012, 17:50
hvlad

Код: Выделить всё

Grant all on test to ROLE myrole;

Re: роли соединение и доступ к таблице

Добавлено: 19 окт 2012, 11:54
zva
Drop role myrole;
Commit;
Create role myrole;
Commit;
Grant all on test to ROLE myrole;
Statement faild, SQLCODE = -104

Dynamic SQL Error
-SQL error code = -104
-Token unknown – line 1,char 21
-ROLE

Re: роли соединение и доступ к таблице

Добавлено: 19 окт 2012, 15:44
hvlad
А у меня работает. Как и должно.

1. Какая версия сервера ?
2. Полный результат запроса

Код: Выделить всё

SELECT * FROM RDB$USER_PRIVILEGES WHERE RDB$USER = 'MYROLE'

Re: роли соединение и доступ к таблице

Добавлено: 20 окт 2012, 20:29
zva
Версия Interbase 7.5

В первом сообщении я все описал.
Вы посоветовали уточнить назначение прав для пользователя, однако, как
я показал во втором сообщении это вызвало исключение с кодом ошибки
-104. Таким образом результат остается прежним, именно, что при подсоединении к базе данных с ролью не действуют разрешения назначенные роли. При обращении к таблице базы данных имею
Select * from test;

Statement failed, SQLCODE = -551

no permission for read/select access to table TEST

При обращении к системной таблице, уже от sysdba, имею

Select rdb@privilege, rdb@user from rdb$user_privileges where rdb$user = ‘TESTUSER’;

Получаю : M TESTUSER (почему rdb@privilege = M? и что это означает)


Выполнив запрос, также от sysdba имею

Select rdb@privilege, rdb@user from rdb$user_privileges where rdb$user = ‘MYROLE’;

Получаю :
S MYROLE
U MYROLE
I MYROLE
D MYROLE
R MYROLE

Как будто все верно, но результата нет.

Если разрешения для таблицы назначить непосредственно пользователю, то результат, как и должен быть соответствует запросу.

Re: роли соединение и доступ к таблице

Добавлено: 22 окт 2012, 11:07
kdv
порядок действий
1. создать роль
2. включить в нее пользователя
3. дать роли права.

M - это membership. Тут должно быть все расписано:
http://www.ibase.ru/devinfo/sqlroles.htm

ваш пример повторил на IB 7.5 на employee.gdb, все работает
- убрал права PUBLIC на COUNTRY и EMPLOYEE
- create role MYROLE
- grant myrole to dima;
- grant all on employee to myrole

затем коннект под dima с ролью myrole. ОК.
select * from country - ошибка, нет прав
select * from employee - нет ошибки.

Re: роли соединение и доступ к таблице

Добавлено: 22 окт 2012, 12:50
hvlad
zva писал(а):Версия Interbase 7.5
Ну так с этого нужно было начинать.
Всегда
zva писал(а):Select rdb@privilege, rdb@user from rdb$user_privileges where rdb$user = ‘TESTUSER’;
Я не просил этот запрос.
Впрочем, для IB это уже не важно.

Re: роли соединение и доступ к таблице

Добавлено: 22 окт 2012, 14:04
zva
Спасибо всем!