【问题标题】:SQL Server 2005 Users & RolesSQL Server 2005 用户和角色
【发布时间】:2011-02-17 18:51:09
【问题描述】:

全部,

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

谢谢,

M

【问题讨论】:

    标签: sql-server sql-server-2005


    【解决方案1】:

    角色成员存储在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 加入。

    【讨论】:

      【解决方案2】:

      这里有一些代码,我们首先检查用户是否已经映射到角色,如果没有,则进行映射。您应该能够在顶部使用使用 database_principals 和 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; ';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-12
        • 2014-07-16
        • 1970-01-01
        • 1970-01-01
        • 2010-09-27
        • 1970-01-01
        • 2011-05-30
        • 2011-03-26
        相关资源
        最近更新 更多