Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблемы с выдачей прав пользователю [mssql 2008 R2]  [new]
b10s
Member

Откуда:
Сообщений: 108
Здравствуйте,

добавил пользователя в СУБД и через интерфейс ms sql sms пытаюсь дать ему права на чтение в базе X. Попытка завершается без предупреждений и ошибок, но при просмотре "Сопоставления пользователя" я не вижу этой галки...

Картинка с другого сайта.

Иду в базу. Смотрю на списки пользователей: вижу, что юзер там есть, но у него какая-т красная стрелка...

Картинка с другого сайта.

В общем же списке пользователей он без красной стрелки и не отключен:

Картинка с другого сайта.


Магия.

В связи с этим вопросы:
1) куда копать, как быть?
2) как посмотреть все права пользователя к конкретной базе или вообще?
5 ноя 13, 15:31    [15079438]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с выдачей прав пользователю [mssql 2008 R2]  [new]
invm
Member

Откуда: Москва
Сообщений: 9401
b10s
как посмотреть все права пользователя к конкретной базе или вообще?
Выполнить выборку из fn_my_permissions в контексте интересующего логина и БД.

ЗЫ: Интересно, вы хоть сами различаете что в своем сообщении наскриншотили?
5 ноя 13, 15:48    [15079580]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с выдачей прав пользователю [mssql 2008 R2]  [new]
b10s
Member

Откуда:
Сообщений: 108
invm,

а есть ли возможность сделать это не входя в учетку пользователя, скажем от sa?

да, сумбурно написал :) но иначе не представил как это показать ...
5 ноя 13, 15:51    [15079606]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с выдачей прав пользователю [mssql 2008 R2]  [new]
b10s
Member

Откуда:
Сообщений: 108
Вот, нашел неплохой вариант посмотреть разрешения пользователей в контексте текущей базы:

SELECT  
    [UserName] = CASE princ.[type] 
                    WHEN 'S' THEN princ.[name]
                    WHEN 'U' THEN ulogin.[name] COLLATE Latin1_General_CI_AI
                 END,
    [UserType] = CASE princ.[type]
                    WHEN 'S' THEN 'SQL User'
                    WHEN 'U' THEN 'Windows User'
                 END,  
    [DatabaseUserName] = princ.[name],       
    [Role] = null,      
    [PermissionType] = perm.[permission_name],       
    [PermissionState] = perm.[state_desc],       
    [ObjectType] = obj.type_desc,--perm.[class_desc],       
    [ObjectName] = OBJECT_NAME(perm.major_id),
    [ColumnName] = col.[name]
FROM    
    --database user
    sys.database_principals princ  
LEFT JOIN
    --Login accounts
    sys.login_token ulogin on princ.[sid] = ulogin.[sid]
LEFT JOIN        
    --Permissions
    
    --select * from sys.database_permissions
    
    sys.database_permissions perm ON perm.[grantee_principal_id] = princ.[principal_id]
LEFT JOIN
    --Table columns
    sys.columns col ON col.[object_id] = perm.major_id 
                    AND col.[column_id] = perm.[minor_id]
LEFT JOIN
    sys.objects obj ON perm.[major_id] = obj.[object_id]
WHERE 
    princ.[type] in ('S','U')
UNION
--List all access provisioned to a sql user or windows user/group through a database or application role
SELECT  
    [UserName] = CASE memberprinc.[type] 
                    WHEN 'S' THEN memberprinc.[name]
                    WHEN 'U' THEN ulogin.[name] COLLATE Latin1_General_CI_AI
                 END,
    [UserType] = CASE memberprinc.[type]
                    WHEN 'S' THEN 'SQL User'
                    WHEN 'U' THEN 'Windows User'
                 END, 
    [DatabaseUserName] = memberprinc.[name],   
    [Role] = roleprinc.[name],      
    [PermissionType] = perm.[permission_name],       
    [PermissionState] = perm.[state_desc],       
    [ObjectType] = obj.type_desc,--perm.[class_desc],   
    [ObjectName] = OBJECT_NAME(perm.major_id),
    [ColumnName] = col.[name]
FROM    
    --Role/member associations
    sys.database_role_members members
JOIN
    --Roles
    sys.database_principals roleprinc ON roleprinc.[principal_id] = members.[role_principal_id]
JOIN
    --Role members (database users)
    sys.database_principals memberprinc ON memberprinc.[principal_id] = members.[member_principal_id]
LEFT JOIN
    --Login accounts
    sys.login_token ulogin on memberprinc.[sid] = ulogin.[sid]
LEFT JOIN        
    --Permissions
    sys.database_permissions perm ON perm.[grantee_principal_id] = roleprinc.[principal_id]
LEFT JOIN
    --Table columns
    sys.columns col on col.[object_id] = perm.major_id 
                    AND col.[column_id] = perm.[minor_id]
LEFT JOIN
    sys.objects obj ON perm.[major_id] = obj.[object_id]
UNION
--List all access provisioned to the public role, which everyone gets by default
SELECT  
    [UserName] = '{All Users}',
    [UserType] = '{All Users}', 
    [DatabaseUserName] = '{All Users}',       
    [Role] = roleprinc.[name],      
    [PermissionType] = perm.[permission_name],       
    [PermissionState] = perm.[state_desc],       
    [ObjectType] = obj.type_desc,--perm.[class_desc],  
    [ObjectName] = OBJECT_NAME(perm.major_id),
    [ColumnName] = col.[name]
FROM    
    --Roles
    sys.database_principals roleprinc
LEFT JOIN        
    --Role permissions
    sys.database_permissions perm ON perm.[grantee_principal_id] = roleprinc.[principal_id]
LEFT JOIN
    --Table columns
    sys.columns col on col.[object_id] = perm.major_id 
                    AND col.[column_id] = perm.[minor_id]                   
JOIN 
    --All objects   
    sys.objects obj ON obj.[object_id] = perm.[major_id]
WHERE
    --Only roles
    roleprinc.[type] = 'R' AND
    --Only public role
    roleprinc.[name] = 'public' AND
    --Only objects of ours, not the MS objects
    obj.is_ms_shipped = 0
ORDER BY
    princ.[Name],
    OBJECT_NAME(perm.major_id),
    col.[name],
    perm.[permission_name],
    perm.[state_desc],
    obj.type_desc--perm.[class_desc] 
5 ноя 13, 16:04    [15079713]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с выдачей прав пользователю [mssql 2008 R2]  [new]
b10s
Member

Откуда:
Сообщений: 108
Теперь вопрос, как это дело поправить. Хочу я, например, вычистить пользователю все права, которые ему давались.

Путем простого удаления и добавления снова - не вышло :(
5 ноя 13, 16:07    [15079736]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с выдачей прав пользователю [mssql 2008 R2]  [new]
Glory
Member

Откуда:
Сообщений: 104760
b10s
Хочу я, например, вычистить пользователю все права, которые ему давались.

Зайти в свойства пользователя и найти закладку Securables
5 ноя 13, 16:10    [15079752]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с выдачей прав пользователю [mssql 2008 R2]  [new]
b10s
Member

Откуда:
Сообщений: 108
без использования интерфейсов.
хочу SQL, голый. чистый sql
5 ноя 13, 16:16    [15079781]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с выдачей прав пользователю [mssql 2008 R2]  [new]
Glory
Member

Откуда:
Сообщений: 104760
b10s
без использования интерфейсов.
хочу SQL, голый. чистый sql

Во всех диалогах есть кнопочка Script
5 ноя 13, 16:18    [15079797]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с выдачей прав пользователю [mssql 2008 R2]  [new]
b10s
Member

Откуда:
Сообщений: 108
Glory,

указанным вами способом - это невозможно!

при изменении прав пользователю невозможно получить сценарии - т.к. там делается всё галками... и есть лишь пимпа "ОК"
5 ноя 13, 16:34    [15079892]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с выдачей прав пользователю [mssql 2008 R2]  [new]
Glory
Member

Откуда:
Сообщений: 104760
b10s
при изменении прав пользователю невозможно получить сценарии - т.к. там делается всё галками... и есть лишь пимпа "ОК"

Кнопка Script находится наверху диалога, а не внизу
5 ноя 13, 16:37    [15079910]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с выдачей прав пользователю [mssql 2008 R2]  [new]
b10s
Member

Откуда:
Сообщений: 108
Glory,

да, точно! спасибо :) я подслеп...

проблему решил через интерфейс уже. всем спасибо!
5 ноя 13, 17:11    [15080111]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить