Пользователи и роли SQL Server 2005 - PullRequest
0 голосов
/ 10 мая 2010

Все,

Я пытаюсь создать базу данных в SQL Server Management Studio 2005. В моей базе данных пользователям принадлежат разные роли. К сожалению, я не могу найти, как записать отношения между пользователями и ролями.

Спасибо

M

Ответы [ 2 ]

1 голос
/ 10 мая 2010

Членство в роли хранится в sys.database_role_members:

select u.name as UserName,
  r.Name as RoleName
from sys.database_principals u
join sys.database_role_members m on u.principal_id = m.member_principal_id
join sys.database_principals r on m.role_principal_id = p.principal_id;

Пользователь по-прежнему может получать дополнительные привилегии за счет членства в фиксированных ролях сервера, которое хранится в sys.server_role_memebers и должно быть объединено с sys.server_principals.

0 голосов
/ 10 мая 2010

Вот некоторый код, который мы используем, чтобы сначала проверить, сопоставлен ли пользователь с ролью, и, если нет, выполнить сопоставление. Вы должны быть в состоянии взять TSQL наверху, который использует database_prinicipals и database_role_members, и использовать его для извлечения отношений, которые есть в вашей базе данных.

   SELECT @sql = '  IF EXISTS (SELECT  * FROM ' + @DatabaseName + '.sys.database_principals a
            JOIN ' + @DatabaseName + '.sys.database_role_members b ON a.principal_id = b.role_principal_id
            JOIN    ' + @DatabaseName + '.sys.database_principals c ON b.member_principal_id = c.principal_id
            WHERE   a.Type = ''R'' AND a.Name = ''' + @CurrentDbRole + '''
            AND     c.type IN ( ''U'', ''S'') AND c.name = ''' + @MappedUser + ''')'                
        + ' BEGIN
                PRINT '''';
                PRINT N''The [' + @MappedUser + '] user is already a member of the [' 
                        + @CurrentDbRole + '] role in the [' + @DatabaseName + '] database. Skipping Role Member creation.''; 
                PRINT '''';
            END
            ELSE
            BEGIN
                PRINT '''';
                PRINT N''Adding the [' + @MappedUser + '] database user as member of the [' + @CurrentDbRole 
                        + '] role in the [' + @DatabaseName + '] database... '';
                PRINT '''';

                USE ' + @DatabaseName +'; 
                EXECUTE sp_addrolemember [' + @CurrentDbRole + '], [' + @MappedUser + '];   

                PRINT '''';
                PRINT ''Completed adding the user to the role.'';
                PRINT '''';             
            END; ';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...