SQL Server 2005登录,安全性,角色和权限备份

时间:2012-12-13 22:30:51

标签: sql-server

我们的非生产服务器定期从生产中刷新信息。这样做的方法是对生产进行完整备份,然后将其还原到非生产SQL Server。这具有覆盖用户的所有权限的不期望的效果。

我一直在尝试找到一种方法,以脚本的形式将这些权限从数据库中提取出来。这样刷新数据库时,我可以针对新刷新的数据库运行脚本并恢复权限。

我试图在sys.database_principals和sys.database_permissions中查找数据,但我的SQL-fu不足以使这些数据成为可用的数据。

获取此数据的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

ķ。 Brian Kelley在SQLServerCentral处有一个相当不错的剧本。

您还可以尝试本页右侧的一些“相关”链接。

答案 1 :(得分:1)

这是另一个非常相似但支持列级权限的方法。输出有效,但必须针对更复杂的数据库进行改进。所以,只是为了给你一个想法:

SELECT 'GRANT ' + database_permissions.permission_name + ' ON ' +
    CASE database_permissions.class_desc
        WHEN 'SCHEMA' THEN schema_name(major_id)
        WHEN 'OBJECT_OR_COLUMN' THEN
            CASE WHEN minor_id = 0 THEN object_name(major_id) COLLATE Latin1_General_CI_AS_KS_WS
            ELSE (SELECT object_name(object_id) + ' ('+ name + ')'
                  FROM sys.columns 
                  WHERE object_id = database_permissions.major_id 
                  AND column_id = database_permissions.minor_id) end
        ELSE 'other' 
    END + 
    ' TO ' + database_principals.name COLLATE Latin1_General_CI_AS_KS_WS
FROM sys.database_permissions
JOIN sys.database_principals
ON database_permissions.grantee_principal_id = database_principals.principal_id
LEFT JOIN sys.objects -- consider schemas
ON objects.object_id = database_permissions.major_id
WHERE database_permissions.major_id > 0
AND permission_name in ('SELECT','INSERT','UPDATE','DELETE')