代码改变世界

导出sqlserver数据库中的登录用户和密码信息(2)

  abce  阅读(273)  评论(0编辑  收藏  举报

sp_hexadecimal和sp_help_revlogin脚本的版本有点老,有人做了更新,因此记录一下。

 

相关连接:

导出sqlserver数据库中的登录用户和密码信息 - abce - 博客园 (cnblogs.com)

Stop using sp_hexadecimal & sp_help_revlogin - Andy M Mallon - AM² (am2.co)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'V' AND object_id = object_id('dbo.ServerLogins'))
    EXEC ('CREATE VIEW dbo.ServerLogins AS SELECT Result = ''This is a stub'';' )
GO
 
ALTER VIEW dbo.ServerLogins
/*************************************************************************************************
AUTHOR: Andy Mallon
CREATED: 20210627
    View to get basic info for logins, simplifying/flattening DMVs, to make applying additional
    criteria/filters from automation & troubleshooting easier
EXAMPLES:
* All logins that can log in (enabled + have CONNECT SQL), modified in the last 7 days:
    SELECT LoginName, DateModified, CreateSql
    FROM dbo.ServerLogins
    WHERE CanLogIn = 1
    AND DateModified >= DATEADD(DAY, -7, GETUTCDATE())
**************************************************************************************************
    This code is licensed as part of Andy Mallon's DBA Database.
    https://github.com/amtwo/dba-database/blob/master/LICENSE
    ©2014-2020 ● Andy Mallon ● am2.co
*************************************************************************************************/
AS
    SELECT
            LoginSid                = p.sid,
            LoginName               = p.name,
            LoginType               = p.type_desc,
            DefaultDatabase         = p.default_database_name,
            VarbinaryPasswordHash   = sl.password_hash,
            IsPolicyChecked         = IIF(sl.is_policy_checked=1,1,0),
            IsExpirationChecked     = IIF(sl.is_expiration_checked=1,1,0),
            IsEnabled               = IIF(p.is_disabled = 0,1,0),
            CanLogIn                = IIF(perm.state IN ('G','W'),1,0),
            CreateSql               = CASE
                                        WHEN p.type IN ('U','G')
                                            THEN CONCAT(N'CREATE LOGIN ',
                                                     QUOTENAME(p.name),
                                                     N' FROM WINDOWS',
                                                     N' WITH DEFAULT_DATABASE = ',
                                                     QUOTENAME(p.default_database_name),
                                                     N';'
                                                 )
                                        WHEN p.type = 'S'
                                            THEN CONCAT(N'CREATE LOGIN ',
                                                     QUOTENAME(p.name),
                                                     N' WITH PASSWORD = ',
                                                     CONVERT(varchar(514), sl.password_hash, 1),
                                                     N' HASHED, SID = ',
                                                     CONVERT(varchar(514), p.sid, 1),
                                                     N', DEFAULT_DATABASE = ',
                                                     QUOTENAME(p.default_database_name),
                                                     N', CHECK_POLICY = ',
                                                     IIF(sl.is_policy_checked=1,N'ON','OFF'),
                                                     N', CHECK_EXPIRATION = ',
                                                     IIF(sl.is_expiration_checked=1,N'ON','OFF'),
                                                     N';'
                                                 )
                                      END,
            EnableSql               = CONCAT(N'ALTER LOGIN ',
                                            QUOTENAME(p.name), ' ',
                                            IIF(p.is_disabled = 1,' DISABLE',' ENABLE'),
                                            N';'
                                    ),
            DateCreated             = p.create_date,
            DateModified            = p.modify_date
            FROM sys.server_principals AS p
            LEFT JOIN sys.sql_logins AS sl
                ON p.name = sl.name
            --Left join here to check to determine if the login is enabled & has connect SQL
            LEFT JOIN sys.server_permissions AS perm
                ON perm.grantee_principal_id = p.principal_id
                AND perm.type = 'COSQ'
                AND perm.state IN ('G','W')
                AND p.is_disabled = 0
            WHERE p.type IN ('S','U','G')
            AND p.name <> N'sa'
            AND p.name NOT LIKE N'##%##';
GO

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'V' AND object_id = object_id('dbo.ServerLoginPermissions'))
    EXEC ('CREATE VIEW dbo.ServerLoginPermissions AS SELECT Result = ''This is a stub'';' )
GO
 
ALTER VIEW dbo.ServerLoginPermissions
/*************************************************************************************************
AUTHOR: Andy Mallon
CREATED: 20210627
    View to get basic info for server-level permissions, simplifying/flattening DMVs, to make applying additional
    criteria/filters from automation & troubleshooting easier
EXAMPLES:
* Get GRANT/DENY commands for permissions on all enabled users
    SELECT p.LoginName, p.PermissionSql
    FROM dbo.ServerLoginPermissions AS p
    JOIN dbo.ServerLogins AS l ON l.LoginSid = p.LoginSid
    WHERE l.IsEnabled = 1;
**************************************************************************************************
    This code is licensed as part of Andy Mallon's DBA Database.
    https://github.com/amtwo/dba-database/blob/master/LICENSE
    ©2014-2020 ● Andy Mallon ● am2.co
*************************************************************************************************/
AS
    SELECT
            LoginSid                = p.sid,
            LoginName               = p.name,
            LoginType               = p.type_desc,
            DefaultDatabase         = p.default_database_name,
            LoginIsEnabled          = IIF(p.is_disabled = 0,1,0),
            CanLogIn                = COALESCE((SELECT TOP 1 1 FROM sys.server_permissions AS cosq
                                                WHERE cosq.grantee_principal_id = p.principal_id
                                                AND cosq.type = 'COSQ'
                                                AND cosq.state IN ('G','W')
                                                AND p.is_disabled = 0
                                                ),
                                        0),
            PermissionType          = perm.type,
            PermissionState         = perm.state,
            PermissionSql           = CONCAT(perm.state_desc, N' ',
                                                perm.permission_name, N' TO ',
                                                QUOTENAME(p.name) COLLATE Latin1_General_CI_AS_KS_WS,
                                                N';'
                                                ),
            DateLoginCreated        = p.create_date,
            DateLoginModified       = p.modify_date
    FROM sys.server_principals AS p
    JOIN sys.server_permissions AS perm
        ON perm.grantee_principal_id = p.principal_id
    WHERE p.type IN ('S','U','G')
    AND p.name <> N'sa'
    AND p.name NOT LIKE N'##%##';
GO

  

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2015-12-19 WARNING: The host 'r6' could not be looked up with /usr/local/mysql/bin/resolveip.
2015-12-19 mysql_install_db 运行结果
点击右上角即可分享
微信分享提示