我试图编写脚本在SQL Server Management数据库Studio 2005中 在我的数据库用户属于不同的角色。 不幸的是我找不到如何编写用户和角色之间的关系。
感谢,
中号
我试图编写脚本在SQL Server Management数据库Studio 2005中 在我的数据库用户属于不同的角色。 不幸的是我找不到如何编写用户和角色之间的关系。
感谢,
中号
下面是一些代码,我们用它来先检查用户是否已经映射到一个角色,如果没有,做的映射。您应该能够在使用database_prindentals和database_role_members的顶部使用TSQL,并使用它来提取数据库中的关系。
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; ';
的角色成员被存储在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
被连接获得额外的特权。