Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Получить список всех доступов пользователя (в т.ч. через роль)  [new]
Тута это
Guest
Субж. Пользователь SQL-ный, права ему выдавались только как grant (т.е. deny не было), используемые объекты находятся в 2 базах на одном сервере. Выдывались и непосредственно пользователю, и его роли (она одна). Сервер 2008R2. Серверная роль - public, стандартных ролей базы (dbdatareader-dbdatawriter етц) у пользователя нет.
16 янв 15, 07:59    [17125345]     Ответить | Цитировать Сообщить модератору
 Re: Получить список всех доступов пользователя (в т.ч. через роль)  [new]
o-o
Guest
доступов к кому/чему?
какие ему права выдавались, на базу, на сервер?
"входит в серверную роль public" не говорит ни о чем.
сидя в паблике, но имея CONTROL SERVER либо IMPERSONATE на любого сисадмина, уже имеешь доступ ко всему.

явно выданные права на сервер лежат в sys.server_permissions
явно выданные права на базу -- в sys.database_permissions
16 янв 15, 10:57    [17126211]     Ответить | Цитировать Сообщить модератору
 Re: Получить список всех доступов пользователя (в т.ч. через роль)  [new]
Тута это
Guest
o-o,

ему выдавались права только на объекты базы - таблицы, ХП/функции, вьюшки, табличные типы.
16 янв 15, 11:01    [17126228]     Ответить | Цитировать Сообщить модератору
 Re: Получить список всех доступов пользователя (в т.ч. через роль)  [new]
invm
Member

Откуда: Москва
Сообщений: 9719
Для БД:
use MyDB;
go

declare @p table (principal_id int);

execute as login = 'MyLogin';

insert into @p
select principal_id from sys.user_token;

revert;

select distinct
 dp.class_desc, dp.major_id, dp.minor_id, dp.permission_name, dp.state_desc
from
 @p p join
 sys.database_permissions dp on dp.grantee_principal_id = p.principal_id
order by
 dp.class_desc, dp.major_id, dp.minor_id;

Результат расшифруете самостоятельно.
Для уровня сервера сделаете по аналогии.
16 янв 15, 11:19    [17126359]     Ответить | Цитировать Сообщить модератору
 Re: Получить список всех доступов пользователя (в т.ч. через роль)  [new]
o-o
Guest
что-то такое:
select USER_NAME(grantee_principal_id) as [user/role],
       coalesce(OBJECT_NAME(major_id), SCHEMA_NAME(major_id), type_name(major_id)) as obj_name,*
from sys.database_permissions
where USER_NAME(grantee_principal_id) in ('my_user', 'my_role')
16 янв 15, 11:20    [17126381]     Ответить | Цитировать Сообщить модератору
 Re: Получить список всех доступов пользователя (в т.ч. через роль)  [new]
o-o
Guest
invm,
ваше меньше отловило.
при вот таких разрешениях:
--grant execute to l1;
--grant select on schema::person to l1 
--grant select on HumanResources.JobCandidate to l1;
--grant select on dbo.ufnGetContactInformation to l1;
--grant references on type::dbo.Flag to l1;
--grant references on type::dbo.NameStyle to role1;

ваше:
class_desc (No column name) minor_id permission_name state_desc
DATABASE public 0 CONNECT GRANT
DATABASE public 0 EXECUTE GRANT
OBJECT_OR_COLUMN NULL 0 SELECT GRANT
SCHEMA role1 0 SELECT GRANT
TYPE NULL 0 REFERENCES GRANT


мое:
user/role obj_name class_desc permission_name
l1 void type DATABASE CONNECT
l1 void type DATABASE EXECUTE
l1 JobCandidate OBJECT_OR_COLUMN SELECT
l1 ufnGetContactInformation OBJECT_OR_COLUMN SELECT
l1 Person SCHEMA SELECT
l1 Flag TYPE REFERENCES
role1 NameStyle TYPE REFERENCES
16 янв 15, 11:31    [17126486]     Ответить | Цитировать Сообщить модератору
 Re: Получить список всех доступов пользователя (в т.ч. через роль)  [new]
invm
Member

Откуда: Москва
Сообщений: 9719
o-o
invm,
ваше меньше отловило.
при вот таких разрешениях:
Не знаю как именно вы проверяли. У меня скрипт
use master;
create login l1 with password = 'abcde';
go

use AdventureWorks2008R2;

create user l1 for login l1;
create role role1;

exec sp_addrolemember 'role1', 'l1';

grant execute to l1;
grant select on schema::person to l1 
grant select on HumanResources.JobCandidate to l1;
grant select on dbo.ufnGetContactInformation to l1;
grant references on type::dbo.Flag to l1;
grant references on type::dbo.NameStyle to role1;
go

declare @p table (principal_id int);

execute as login = 'l1';

insert into @p
select principal_id from sys.user_token;

revert;

select distinct
 dp.class_desc, dp.major_id, dp.minor_id, dp.permission_name, dp.state_desc
from
 @p p join
 sys.database_permissions dp on dp.grantee_principal_id = p.principal_id
order by
 dp.class_desc, dp.major_id, dp.minor_id;
go

drop user l1;
drop role role1;
go

drop login l1;
Возвращает:
+
class_descmajor_idminor_idpermission_namestate_desc
DATABASE00CONNECTGRANT
DATABASE00EXECUTEGRANT
OBJECT_OR_COLUMN-5050SELECTGRANT
OBJECT_OR_COLUMN-5040SELECTGRANT
OBJECT_OR_COLUMN-5030SELECTGRANT
OBJECT_OR_COLUMN-5020SELECTGRANT
OBJECT_OR_COLUMN-5010SELECTGRANT
OBJECT_OR_COLUMN-5000SELECTGRANT
OBJECT_OR_COLUMN-4990SELECTGRANT
OBJECT_OR_COLUMN-4980SELECTGRANT
OBJECT_OR_COLUMN-4970SELECTGRANT
OBJECT_OR_COLUMN-4960SELECTGRANT
OBJECT_OR_COLUMN-4940SELECTGRANT
OBJECT_OR_COLUMN-4890SELECTGRANT
OBJECT_OR_COLUMN-4850SELECTGRANT
OBJECT_OR_COLUMN-4840SELECTGRANT
OBJECT_OR_COLUMN-4830SELECTGRANT
OBJECT_OR_COLUMN-4820SELECTGRANT
OBJECT_OR_COLUMN-4810SELECTGRANT
OBJECT_OR_COLUMN-4800SELECTGRANT
OBJECT_OR_COLUMN-4790SELECTGRANT
OBJECT_OR_COLUMN-4780SELECTGRANT
OBJECT_OR_COLUMN-4770SELECTGRANT
OBJECT_OR_COLUMN-4760SELECTGRANT
OBJECT_OR_COLUMN-4690SELECTGRANT
OBJECT_OR_COLUMN-4680SELECTGRANT
OBJECT_OR_COLUMN-4670SELECTGRANT
OBJECT_OR_COLUMN-4660SELECTGRANT
OBJECT_OR_COLUMN-4650SELECTGRANT
OBJECT_OR_COLUMN-4640SELECTGRANT
OBJECT_OR_COLUMN-4630SELECTGRANT
OBJECT_OR_COLUMN-4620SELECTGRANT
OBJECT_OR_COLUMN-4610SELECTGRANT
OBJECT_OR_COLUMN-4600SELECTGRANT
OBJECT_OR_COLUMN-4590SELECTGRANT
OBJECT_OR_COLUMN-4580SELECTGRANT
OBJECT_OR_COLUMN-4570SELECTGRANT
OBJECT_OR_COLUMN-4560SELECTGRANT
OBJECT_OR_COLUMN-4550SELECTGRANT
OBJECT_OR_COLUMN-4540SELECTGRANT
OBJECT_OR_COLUMN-4530SELECTGRANT
OBJECT_OR_COLUMN-4520SELECTGRANT
OBJECT_OR_COLUMN-4510SELECTGRANT
OBJECT_OR_COLUMN-4500SELECTGRANT
OBJECT_OR_COLUMN-4490SELECTGRANT
OBJECT_OR_COLUMN-4480SELECTGRANT
OBJECT_OR_COLUMN-4470SELECTGRANT
OBJECT_OR_COLUMN-4460SELECTGRANT
OBJECT_OR_COLUMN-4450SELECTGRANT
OBJECT_OR_COLUMN-4440SELECTGRANT
OBJECT_OR_COLUMN-4430SELECTGRANT
OBJECT_OR_COLUMN-4420SELECTGRANT
OBJECT_OR_COLUMN-4410SELECTGRANT
OBJECT_OR_COLUMN-4400SELECTGRANT
OBJECT_OR_COLUMN-4390SELECTGRANT
OBJECT_OR_COLUMN-4380SELECTGRANT
OBJECT_OR_COLUMN-4370SELECTGRANT
OBJECT_OR_COLUMN-4360SELECTGRANT
OBJECT_OR_COLUMN-4350SELECTGRANT
OBJECT_OR_COLUMN-4340SELECTGRANT
OBJECT_OR_COLUMN-4330SELECTGRANT
OBJECT_OR_COLUMN-4320SELECTGRANT
OBJECT_OR_COLUMN-4310SELECTGRANT
OBJECT_OR_COLUMN-4300SELECTGRANT
OBJECT_OR_COLUMN-4290SELECTGRANT
OBJECT_OR_COLUMN-4280SELECTGRANT
OBJECT_OR_COLUMN-4270SELECTGRANT
OBJECT_OR_COLUMN-4260SELECTGRANT
OBJECT_OR_COLUMN-4250SELECTGRANT
OBJECT_OR_COLUMN-4240SELECTGRANT
OBJECT_OR_COLUMN-4230SELECTGRANT
OBJECT_OR_COLUMN-4220SELECTGRANT
OBJECT_OR_COLUMN-4210SELECTGRANT
OBJECT_OR_COLUMN-4200SELECTGRANT
OBJECT_OR_COLUMN-4190SELECTGRANT
OBJECT_OR_COLUMN-4180SELECTGRANT
OBJECT_OR_COLUMN-4170SELECTGRANT
OBJECT_OR_COLUMN-4160SELECTGRANT
OBJECT_OR_COLUMN-4150SELECTGRANT
OBJECT_OR_COLUMN-4140SELECTGRANT
OBJECT_OR_COLUMN-4130SELECTGRANT
OBJECT_OR_COLUMN-4120SELECTGRANT
OBJECT_OR_COLUMN-4110SELECTGRANT
OBJECT_OR_COLUMN-4100SELECTGRANT
OBJECT_OR_COLUMN-4090SELECTGRANT
OBJECT_OR_COLUMN-4080SELECTGRANT
OBJECT_OR_COLUMN-4070SELECTGRANT
OBJECT_OR_COLUMN-4060SELECTGRANT
OBJECT_OR_COLUMN-4050SELECTGRANT
OBJECT_OR_COLUMN-4040SELECTGRANT
OBJECT_OR_COLUMN-4030SELECTGRANT
OBJECT_OR_COLUMN-4020SELECTGRANT
OBJECT_OR_COLUMN-4010SELECTGRANT
OBJECT_OR_COLUMN-4000SELECTGRANT
OBJECT_OR_COLUMN-3990SELECTGRANT
OBJECT_OR_COLUMN-3980SELECTGRANT
OBJECT_OR_COLUMN-3970SELECTGRANT
OBJECT_OR_COLUMN-3960SELECTGRANT
OBJECT_OR_COLUMN-3950SELECTGRANT
OBJECT_OR_COLUMN-3940SELECTGRANT
OBJECT_OR_COLUMN-3930SELECTGRANT
OBJECT_OR_COLUMN-3920SELECTGRANT
OBJECT_OR_COLUMN-3910SELECTGRANT
OBJECT_OR_COLUMN-3900SELECTGRANT
OBJECT_OR_COLUMN-3890SELECTGRANT
OBJECT_OR_COLUMN-3880SELECTGRANT
OBJECT_OR_COLUMN-3870SELECTGRANT
OBJECT_OR_COLUMN-3860SELECTGRANT
OBJECT_OR_COLUMN-3850SELECTGRANT
OBJECT_OR_COLUMN-1430SELECTGRANT
OBJECT_OR_COLUMN-1420SELECTGRANT
OBJECT_OR_COLUMN-1410SELECTGRANT
OBJECT_OR_COLUMN-1400SELECTGRANT
OBJECT_OR_COLUMN-1390SELECTGRANT
OBJECT_OR_COLUMN-1380SELECTGRANT
OBJECT_OR_COLUMN-1370SELECTGRANT
OBJECT_OR_COLUMN-1360SELECTGRANT
OBJECT_OR_COLUMN-1350SELECTGRANT
OBJECT_OR_COLUMN-1340SELECTGRANT
OBJECT_OR_COLUMN-1330SELECTGRANT
OBJECT_OR_COLUMN-1320SELECTGRANT
OBJECT_OR_COLUMN-1310SELECTGRANT
OBJECT_OR_COLUMN-1300SELECTGRANT
OBJECT_OR_COLUMN-1290SELECTGRANT
OBJECT_OR_COLUMN-1070SELECTGRANT
OBJECT_OR_COLUMN-1060SELECTGRANT
OBJECT_OR_COLUMN-1050SELECTGRANT
OBJECT_OR_COLUMN-1040SELECTGRANT
OBJECT_OR_COLUMN-1030SELECTGRANT
OBJECT_OR_COLUMN-1020SELECTGRANT
OBJECT_OR_COLUMN-1010SELECTGRANT
OBJECT_OR_COLUMN12215793900EXECUTEGRANT
OBJECT_OR_COLUMN12306274270SELECTGRANT
OBJECT_OR_COLUMN12375794470EXECUTEGRANT
OBJECT_OR_COLUMN12535795040EXECUTEGRANT
OBJECT_OR_COLUMN18922017910SELECTGRANT
SCHEMA120SELECTGRANT
TYPE2690REFERENCESGRANT
TYPE2700REFERENCESGRANT
16 янв 15, 11:54    [17126679]     Ответить | Цитировать Сообщить модератору
 Re: Получить список всех доступов пользователя (в т.ч. через роль)  [new]
Glory
Member

Откуда:
Сообщений: 104751
http://msdn.microsoft.com/ru-ru/library/ms176097.aspx
16 янв 15, 11:58    [17126710]     Ответить | Цитировать Сообщить модератору
 Re: Получить список всех доступов пользователя (в т.ч. через роль)  [new]
o-o
Guest
invm
Не знаю как именно вы проверяли...

ой, я чудным способом проверяю, да...
все происходило в слишком отвлекающей обстановке,
dp.major_id магически преобразовалось в user_name(dp.major_id)
(не спрашивайте, как и почему.
да, это id объекта, да, моих рук дело, но не помню, зачем )
короче, если выполнить вот такое:
declare @p table (principal_id int);

execute as login = 'l1';

insert into @p
select principal_id from sys.user_token;

revert;

select distinct
 dp.class_desc, user_name(dp.major_id), dp.minor_id, dp.permission_name, dp.state_desc
from
 @p p join
 sys.database_permissions dp on dp.grantee_principal_id = p.principal_id
order by
 dp.class_desc, user_name(dp.major_id), dp.minor_id;
go

то почти все user_name(dp.major_id) будут NULL,
из результата отвалятся, ведь там DISTINCT.
такой вот пятничный анекдот

К сообщению приложен файл. Размер - 79Kb
16 янв 15, 18:51    [17129962]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить