在SQL Server中保持用户权限同步的一种解决方法是使用以下代码示例:
-- 创建存储过程以同步用户权限
CREATE PROCEDURE dbo.SyncUserPermissions
AS
BEGIN
-- 删除已有的用户权限
EXEC sp_MSforeachdb N'
USE [?];
DECLARE @sql NVARCHAR(MAX) = N'''';
SELECT @sql += N''USE ['' + DB_NAME() + N'']; REVOKE ALL FROM ['' + name + N''];''
FROM sys.database_principals
WHERE type IN (''U'', ''S'')
EXEC sp_executesql @sql;
';
-- 向用户授予权限
EXEC sp_MSforeachdb N'
USE [?];
DECLARE @sql NVARCHAR(MAX) = N'''';
SELECT @sql += N''USE ['' + DB_NAME() + N'']; GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::['' + name + N''] TO ['' + name + N''];''
FROM sys.schemas
WHERE principal_id IS NOT NULL
EXEC sp_executesql @sql;
';
END
这段代码创建了一个名为SyncUserPermissions
的存储过程。该存储过程首先删除所有用户的现有权限,然后重新向用户授予SELECT
、INSERT
、UPDATE
和DELETE
权限。
要使用这个存储过程,只需执行以下代码:
EXEC dbo.SyncUserPermissions;
请注意,执行此存储过程将删除所有用户的现有权限,并重新授予权限。因此,在执行之前,请确保您真正需要同步用户权限。此外,根据您的需求,您可能需要对存储过程进行修改以匹配您的实际环境和权限需求。