Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQLServer2005用户&;角色_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql server SQLServer2005用户&;角色

Sql server SQLServer2005用户&;角色,sql-server,sql-server-2005,Sql Server,Sql Server 2005,全部, 我正在尝试在SQLServerManagementStudio 2005中编写数据库脚本。 在我的数据库中,用户属于不同的角色。 不幸的是,我找不到如何编写用户和角色之间的关系 谢谢 M下面是一些代码,我们使用这些代码首先检查用户是否已映射到角色,如果未映射到角色,则执行映射。您应该能够在顶部使用TSQL,该TSQL使用database_prinicipals和database_role_成员,并使用它们提取出您在databaase中的关系 SELECT @sql = ' IF

全部,

我正在尝试在SQLServerManagementStudio 2005中编写数据库脚本。 在我的数据库中,用户属于不同的角色。 不幸的是,我找不到如何编写用户和角色之间的关系

谢谢


M

下面是一些代码,我们使用这些代码首先检查用户是否已映射到角色,如果未映射到角色,则执行映射。您应该能够在顶部使用TSQL,该TSQL使用database_prinicipals和database_role_成员,并使用它们提取出您在databaase中的关系

   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; ';

角色成员身份存储在:

用户仍然可以通过其服务器固定角色成员身份获得附加权限,该成员身份存储在中,需要加入

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;