• sp获取用户权限,打印出批量赋权语句


    ALTER PROCEDURE [dbo].[usp_ShowUserPermission]
    AS
    BEGIN
    DECLARE @px INT = 0
    DECLARE @loginuser VARCHAR(max) ;
    DECLARE @dbname VARCHAR(MAX)
    DECLARE @sql VARCHAR(MAX)
    SELECT @loginuser = SYSTEM_USER ;
    IF OBJECT_ID('tempdb..#dbs', 'U') IS NOT NULL
    DROP TABLE #dbs
    IF OBJECT_ID('tempdb..#permiss', 'U') IS NOT NULL
    DROP TABLE #permiss
    IF OBJECT_ID('tempdb..#execsql', 'U') IS NOT NULL
    DROP TABLE #execsql
    CREATE TABLE #execsql
    (
    id INT IDENTITY(1, 1) ,
    esql VARCHAR(max)
    )
    CREATE TABLE #permiss
    (
    [dbname] [varchar](60) NOT NULL ,
    [user] [sysname] NOT NULL ,
    [userType] [nvarchar](60) NULL ,
    [permission] [nvarchar](128) NULL ,
    [PermissionState] [nvarchar](60) NULL ,
    [ObjectName] [nvarchar](128) NULL ,
    [Schema] [nvarchar](128) NULL ,
    [ObjectType] [varchar](60) NULL ,
    [PermissionClass] [nvarchar](60) NULL
    )
    SELECT id = IDENTITY( INT ,1,1 ),
    name
    INTO #dbs
    FROM master.sys.databases db
    WHERE db.database_id > 4
    AND db.name NOT IN ('dbcenter','ReportServer','ReportServerTempDB','TargetDB','InitiatorDB')
    WHILE ( @px < ( SELECT MAX(id)
    FROM #dbs
    ) )
    BEGIN
    SELECT TOP 1
    @dbname = #dbs.name
    FROM #dbs
    SET @sql = 'use ' + @dbname + ' SELECT ' + '''' + @dbname
    + '''' + ' as ''dbname'', c.NAME AS ''user'' ,
    c.type_desc AS ''userType'' ,
    a.permission_name AS ''permission'' ,
    a.state_desc AS ''PermissionState'' ,
    b.name ''ObjectName'' ,
    OBJECT_SCHEMA_NAME(a.major_id) AS ''Schema'' ,
    CASE b.type
    WHEN ''AF'' THEN ''Aggregate function (CLR)''
    WHEN ''C'' THEN ''CHECK constraint''
    WHEN ''D'' THEN ''DEFAULT (constraint or stand-alone)''
    WHEN ''F'' THEN ''FOREIGN KEY constraint''
    WHEN ''PK'' THEN ''PRIMARY KEY constraint''
    WHEN ''P'' THEN ''SQL stored procedure''
    WHEN ''PC'' THEN ''Assembly (CLR) stored procedure''
    WHEN ''FN'' THEN ''SQL scalar function''
    WHEN ''FS'' THEN ''Assembly (CLR) scalar function''
    WHEN ''FT'' THEN ''Assembly (CLR) table-valued function''
    WHEN ''R'' THEN ''Rule (old-style, stand-alone)''
    WHEN ''RF'' THEN ''Replication-filter-procedure''
    WHEN ''S'' THEN ''System base table''
    WHEN ''SN'' THEN ''Synonym''
    WHEN ''SQ'' THEN ''Service queue''
    WHEN ''TA'' THEN ''Assembly (CLR) DML trigger''
    WHEN ''TR'' THEN ''SQL DML trigger''
    WHEN ''IF'' THEN ''SQL inline table-valued function''
    WHEN ''TF'' THEN ''SQL table-valued-function''
    WHEN ''U'' THEN ''Table ([user-defined])''
    WHEN ''UQ'' THEN ''UNIQUE constraint''
    WHEN ''V'' THEN ''View''
    WHEN ''X'' THEN ''Extended stored procedure''
    WHEN ''IT'' THEN ''Internal table''
    END ''ObjectType'' ,
    a.class_desc ''PermissionClass'' from ' + @dbname
    + '.sys.database_principals c
    left join ' + @dbname
    + '.sys.database_permissions a ON c.principal_id = a.grantee_principal_id
    left JOIN ' + @dbname + '.sys.sysobjects b ON b.id = a.major_id where c.type = ''S'' and c.name not in (''dbo'',''sys'',''sa'',''guest'',''INFORMATION_SCHEMA'','''
    + @loginuser + ''')'

    -- database_principals type=s sqluser,type=R database role
    INSERT INTO #permiss
    EXEC ( @sql
    )
    SET @px = @px + 1
    DELETE #dbs
    WHERE name = @dbname
    END
    SELECT * FROM #permiss
    SELECT 'use ' + dbname +' IF EXISTS (SELECT NAME FROM sys.sysusers WHERE name='''+[user]+''')
    BEGIN DROP USER '+[user]+' END
    CREATE USER '+[user]+'' AS createUser FROM #permiss GROUP BY dbname,[user]
    INSERT #execsql
    SELECT 'use ' + dbname
    +CASE PermissionClass WHEN 'OBJECT_OR_COLUMN' THEN ' grant '+permission+' on '+ObjectName+' to '+[user] WHEN 'DATABASE'
    THEN ' grant '+permission+' to '+[user] END
    FROM #permiss WHERE permission <>'CONNECT'
    SELECT * FROM #execsql
    END

  • 相关阅读:
    关于2021-01-13爆发的incaseformat病毒相关信息收集1.2(持续更新和关注中...)
    (转)服务器UDIMM、LRDIMM、RDIMM三种内存的区别
    Shred命令 学习
    关于图片文件的元数据信息清理和时间戳修改
    关于Chrome 浏览器 “小尾巴”问题的解决办法
    CF471D MUH and Cube Walls -kmp
    UVA12467 Secret Word -kmp
    UVA12604 Caesar Cipher -kmp
    【JLOI2007】周期串
    Http协议
  • 原文地址:https://www.cnblogs.com/sandra/p/4834943.html
Copyright © 2020-2023  润新知