Scripting SQL Server permissions

前端 未结 9 2055
轮回少年
轮回少年 2021-01-30 02:58

I want to copy all the permission I\'ve set on stored procedures and other stuff from my development database to my production database. It\'s incredibly cumbersome, not to ment

9条回答
  •  半阙折子戏
    2021-01-30 03:52

    SELECT
        dp.state_desc + ' ' 
           + dp.permission_name collate latin1_general_cs_as
           + ISNULL((' ON ' + QUOTENAME(s.name) + '.' + QUOTENAME(o.name)),'')
           + ' TO ' + QUOTENAME(dpr.name)
    FROM sys.database_permissions AS dp
      LEFT JOIN sys.objects AS o ON dp.major_id=o.object_id
      LEFT JOIN sys.schemas AS s ON o.schema_id = s.schema_id
      LEFT JOIN sys.database_principals AS dpr ON dp.grantee_principal_id=dpr.principal_id
    WHERE dpr.name NOT IN ('public','guest')
    

    Slight change of the accepted answer if you want to grab permissions that are applied at database level in addition to object level. Basically switch to LEFT JOIN and make sure to handle NULL for object and schema names.

提交回复
热议问题