【问题标题】:Check users in a security group in SQL Server在 SQL Server 中检查安全组中的用户
【发布时间】:2013-09-11 21:27:45
【问题描述】:

在我的数据库的 Security/Users 文件夹中,我有一堆安全组,包括“MyApplication Users”。我需要检查我(或其他用户)是否在该组中,但我不知道如何查询它或在哪里可以看到此信息。我尝试查看属性,但找不到任何东西。有什么想法吗?

【问题讨论】:

    标签: sql sql-server security sql-server-2005 active-directory


    【解决方案1】:

    检查自己或当前用户:

    SELECT IS_MEMBER('[group or role]')
    

    结果为 1 = 是,0 = 否,null = 查询的组或角色无效。

    若要获取用户列表,请尝试 xp_logininfo 如果扩展 procs 已启用并且相关组是 windows 组:

    EXEC master..xp_logininfo 
    @acctname = '[group]',
    @option = 'members'
    

    【讨论】:

    • 这正是我所需要的!谢谢你:)
    【解决方案2】:

    快速查看当前用户所属的组/角色;

    select
          [principal_id]
        , [name]
        , [type_desc]
        , is_member(name) as [is_member]
    from [sys].[database_principals]
    where [type] in ('R','G')
    order by [is_member] desc,[type],[name]
    

    【讨论】:

      【解决方案3】:

      要查找实例中的 AD 组成员,我们可以使用以下查询:

      xp_logininfo 'DomainName\AD_GroupName', 'members'
      

      通过使用这个查询,我们可以找到以下状态。

      account name, type, privilege, mapped login name, permission path
      

      【讨论】:

      • 谢谢,这正是我需要的。
      【解决方案4】:

      Accepted answer from DeanG 是在 SQL Server 中获取此信息的首选解决方案


      您可以为此使用 Active Directory 工具。我喜欢 Active Directory 用户和计算机,它是 Remote Server Administration Tools 的一部分。按照链接下载并在 Windows 7 上安装这些工具。

      安装后,您可以搜索特定的组名:

      然后您可以使用成员选项卡查看组成员身份:

      如果您不想使用与 RSA 工具一起打包的 AD 浏览器,还有其他几个可用的。

      【讨论】:

      • 要打开这个窗口,在cmd中运行下面一行Rundll32 dsquery.dll OpenQueryWindow
      【解决方案5】:

      你没有。

      相反,您使用用户和组来授予/拒绝权限,并让引擎适当地执行它们。尝试推出自己的安全性将使您一事无成。一个平庸的例子是当你无法遵守“一个拒绝胜过所有授权”的规则时。而且您将无法驾驭 EXECUTE AS 的复杂性。更不用说基于模块签名的安全性了。

      作为记录:用户、角色和组在sys.database_principals 目录视图中公开。 sys.fn_my_permissions 将返回特定安全对象的当前上下文权限。

      【讨论】:

        【解决方案6】:

        Microsoft 页面 here 上提供的代码每次都对我有用。

        SELECT DP1.name AS DatabaseRoleName,   
           isnull (DP2.name, 'No members') AS DatabaseUserName   
         FROM sys.database_role_members AS DRM  
         RIGHT OUTER JOIN sys.database_principals AS DP1  
           ON DRM.role_principal_id = DP1.principal_id  
         LEFT OUTER JOIN sys.database_principals AS DP2  
           ON DRM.member_principal_id = DP2.principal_id  
        WHERE DP1.type = 'R'
        ORDER BY DP1.name;
        

        如果这对你有用,请告诉我!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-24
          • 1970-01-01
          • 1970-01-01
          • 2011-07-17
          • 1970-01-01
          • 2021-03-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多