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 是否有SQL Server实用程序生成所有服务器登录名的大列表及其访问概述?_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql server 是否有SQL Server实用程序生成所有服务器登录名的大列表及其访问概述?

Sql server 是否有SQL Server实用程序生成所有服务器登录名的大列表及其访问概述?,sql-server,sql-server-2005,Sql Server,Sql Server 2005,我想知道是否有一个实用程序可以列出特定服务器上的服务器登录及其访问权限 这将是我从右键单击每个用户->属性->用户映射中获得的信息 但它没有为每个用户手动执行该过程,而是列出了信息 例如: MyDomain\John - Server Roles - sysadmin - MyDatabase1 - Roles db_reader public - MyDatabase2 - Roles db_reader public MyDom

我想知道是否有一个实用程序可以列出特定服务器上的服务器登录及其访问权限

这将是我从右键单击每个用户->属性->用户映射中获得的信息 但它没有为每个用户手动执行该过程,而是列出了信息

例如:

MyDomain\John
 - Server Roles
   - sysadmin
 - MyDatabase1
   - Roles
     db_reader
     public
 - MyDatabase2
   - Roles
     db_reader
     public
MyDomain\Steve
 - MyDatabase1
   - Roles
     db_reader
     public

我对sp_helplogins系统存储过程进行了黑客攻击,以返回接近您所要查找的内容

我无法正确粘贴脚本,因此这里是脚本的一个示例

DECLARE    @LoginNamePattern     sysname    = NULL

set nocount on

declare
        @exec_stmt nvarchar(3550)

declare
       @CountSkipPossUsers             int
      ,@Int1                           int

declare
       @c10DBName                      sysname
      ,@c10DBStatus                    int
      ,@c10DBSID                       varbinary(85)

declare
       @charMaxLenLoginName            varchar(11)
      ,@charMaxLenDBName               varchar(11)
      ,@charMaxLenUserName             varchar(11)

declare
       @DBOptLoading                   int   --0x0020      32  "DoNotRecover"
      ,@DBOptPreRecovery               int   --0x0040      64
      ,@DBOptRecovering                int   --0x0080     128

      ,@DBOptSuspect                   int   --0x0100     256  ("not recovered")
      ,@DBOptOffline                   int   --0x0200     512
      ,@DBOptDBOUseOnly                int   --0x0800    2048

      ,@DBOptSingleUser                int   --0x1000    4096


-------------  create work holding tables  ----------------
-- Create temp tables before any DML to ensure dynamic


CREATE TABLE #tb1_UA
   (
    LoginName                       sysname     collate database_default NOT Null
   ,DBName                          sysname     collate database_default NOT Null
   ,UserName                        sysname     collate database_default NOT Null
   )




---------------  Cursor, for DBNames  -------------------


declare ms_crs_10_DB
   Cursor local static For
select
             name ,status ,sid
      from
             master.dbo.sysdatabases



OPEN ms_crs_10_DB


-----------------  LOOP 10:  thru Databases  ------------------


WHILE (10 = 10)
   begin    --LOOP 10: thru Databases


   FETCH
             next
      from
             ms_crs_10_DB
      into
             @c10DBName
            ,@c10DBStatus
            ,@c10DBSID


   IF (@@fetch_status <> 0)
      begin
      deallocate ms_crs_10_DB
      BREAK
      end


--------------------  Okay if we peek inside this DB now?


   IF (     @c10DBStatus & @DBOptDBOUseOnly  > 0
       AND  @c10DBSID                       <> suser_sid()
      )
      begin
      select @CountSkipPossUsers = @CountSkipPossUsers + 1
      CONTINUE
      end


   IF (@c10DBStatus & @DBOptSingleUser  > 0)
      begin

      select    @Int1 = count(*)
         from   sys.dm_exec_requests
         where  session_id <> @@spid
         and    database_id = db_id(@c10DBName)

      IF (@Int1 > 0)
         begin
         select @CountSkipPossUsers = @CountSkipPossUsers + 1
         CONTINUE
         end
      end


   IF (@c10DBStatus &
         (
           @DBOptLoading
         | @DBOptRecovering
         | @DBOptSuspect
         | @DBOptPreRecovery
         )
               > 0
      )
      begin
      select @CountSkipPossUsers = @CountSkipPossUsers + 1
      CONTINUE
      end


   IF (@c10DBStatus &
         (
           @DBOptOffline
         )
               > 0
      )
      begin
      --select @CountSkipPossUsers = @CountSkipPossUsers + 1
      CONTINUE
      end

    IF (has_dbaccess(@c10DBName) <> 1)
      begin
      raiserror(15622,-1,-1, @c10DBName)
      CONTINUE
      end



---------------------  Add the User info to holding table.
    select @exec_stmt = '
   INSERT    #tb1_UA
            (
             DBName
            ,LoginName
            ,UserName
            )
      select

             N' + quotename(@c10DBName, '''') + '
            ,l.name
            ,u2.name
         from
             ' + quotename(@c10DBName, '[')+ '.sys.database_role_members m
            ,' + quotename(@c10DBName, '[')+ '.sys.database_principals u1
            ,' + quotename(@c10DBName, '[')+ '.sys.database_principals u2
            ,sys.server_principals l
         where
             u1.sid = l.sid
         and m.member_principal_id = u1.principal_id
         and m.role_principal_id = u2.principal_id' +
            case 
            when @LoginNamePattern is null
            then ''
            else ' and ( l.name = N' + quotename(@LoginNamePattern , '''') + '
                or l.name = N' + quotename(@LoginNamePattern , '''') + ')'
            end

   EXECUTE(@exec_stmt)

   end --loop 10


------------  Optimize UA report column display widths  -----------


select
             @charMaxLenLoginName   =
                  convert ( varchar
                           ,isnull ( max(datalength(LoginName)) ,9)
                          )
            ,@charMaxLenDBName      =
                  convert ( varchar
                           ,isnull ( max(datalength(DBName)) ,6)
                          )
            ,@charMaxLenUserName    =
                  convert ( varchar
                           ,isnull ( max(datalength(UserName)) ,8)
                          )
      from
             #tb1_UA



------------  Print out the UserOrAlias report  ------------

EXEC(
'
set nocount off


select
          ''LoginName''    = substring (LoginName  ,1 ,'
                                       + @charMaxLenLoginName  + ')

         ,''DBName''       = substring (DBName     ,1 ,'
                                       + @charMaxLenDBName     + ')

         ,''MemberOf''     = substring (UserName   ,1 ,'
                                       + @charMaxLenUserName   + ')

   from
          #tb1_UA
   order by
          1 ,2 ,3


Set nocount on
'
)

DROP Table #tb1_UA
DECLARE@LoginNamePattern sysname=NULL
不计较
声明
@执行董事(3550)
声明
@CountSkipPossUsers int
,@Int1 int
声明
@c10DBName系统名
,@c10DBStatus int
,@c10DBSID varbinary(85)
声明
@charMaxLenLoginName varchar(11)
,@charMaxLenDBName varchar(11)
,@charMaxLenUserName varchar(11)
声明
@DBOptLoading int--0x0020 32“DoNotRecover”
,@DBOptPreRecovery int--0x0040 64
,@DBOptRecovering int--0x0080 128
,@dboptsspect int--0x0100 256(“未恢复”)
,@DBOptOffline int--0x0200512
,@DBOptDBOUseOnly int--0x0800 2048
,@DBOptSingleUser int--0x1000 4096
-------------创建工作保留表----------------
--在任何DML之前创建临时表,以确保动态
创建表#tb1_UA
(
LoginName sysname collate数据库\u默认值不为Null
,DBName sysname collate数据库\u默认值不为空
,用户名sysname collate数据库\u默认值不为空
)
---------------游标,用于数据库名-------------------
声明ms_crs_10_DB
游标本地静态
选择
名称、状态、sid
从…起
master.dbo.sysdatabases
打开ms_crs_10_DB
-----------------循环10:thru数据库------------------
而(10=10)
开始--循环10:thru数据库
取来
下一个
从…起
ms_crs_10_DB
进入
@c10DBName
,@c10DBStatus
,@c10DBSID
如果(@@fetch\u状态0)
开始
解除分配ms_crs_10_DB
打破
结束
--------------------好吧,如果我们现在看看数据库里面?
如果(@c10DBStatus&@DBOptDBOUseOnly>0
和@c10DBSID suser_sid()
)
开始
选择@CountSkipPossUsers=@CountSkipPossUsers+1
继续
结束
IF(@c10DBStatus&@dboptingleuser>0)
开始
选择@Int1=count(*)
从sys.dm_exec_请求
何处会话\u id@@spid
和数据库_id=db_id(@c10DBName)
如果(@Int1>0)
开始
选择@CountSkipPossUsers=@CountSkipPossUsers+1
继续
结束
结束
如果(@c10DBStatus&
(
@DBOptLoading
|@dboptre
|@dboptspect
|@DBOptPreRecovery
)
> 0
)
开始
选择@CountSkipPossUsers=@CountSkipPossUsers+1
继续
结束
如果(@c10DBStatus&
(
@DBOptOffline
)
> 0
)
开始
--选择@CountSkipPossUsers=@CountSkipPossUsers+1
继续
结束
IF(具有_dbaccess(@c10DBName)1)
开始
raiserror(15622,-1,-1,@c10DBName)
继续
结束
---------------------将用户信息添加到保留表中。
选择@exec\u stmt=
插入#tb1_UA
(
数据库名称
,登录名
,用户名
)
选择
N'+quotename(@c10DBName,'')+'
,l.name
,u2.name
从…起
“+quotename(@c10DBName,[')+”.sys.database_role_members\m
,'+quotename(@c10DBName,[')+'.sys.database_1
,'+quotename(@c10DBName,[')+'.sys.database_2
,sys.server\u principals
哪里
u1.sid=l.sid
m.member\u principal\u id=u1.principal\u id
m.role\u principal\u id=u2.principal\u id'+
案例
当@LoginNamePattern为空时
然后“
else'和(l.name=N'+quotename(@LoginNamePattern,'')+'
或l.name=N'+quotename(@LoginNamePattern,'')'
结束
执行(@exec\u stmt)
结束--循环10
------------优化UA报告列显示宽度-----------
选择
@CharmaxloginName=
转换(varchar)
,isnull(最大数据长度(LoginName)),9)
)
,@charMaxLenDBName=
转换(varchar)
,isnull(最大数据长度(DBName)),6)
)
,@charMaxLenUserName=
转换(varchar)
,isnull(最大数据长度(用户名)),8)
)
从…起
#tb1_UA
------------打印出UserOrAlias报告------------
执行官(
'
抵消
选择
''LoginName''=子字符串(LoginName,1,'
+@charmaxloginName+”)
,“DBName”=子字符串(DBName,1,”
+@charMaxLenDBName+”)
,“MemberOf”=子字符串(用户名,1,'
+@charMaxLenUserName+”)
从…起
#tb1_UA
订购人
1 ,2 ,3
不计较
'
)
升降台#tb1_UA