Sql-Server-2008-R2
具有所有使用者安全權限的 SQL Server 2008 R2 複製架構
我有一個來自高價值使用者的產品支持請求,要求調整公司範圍儀表板上的設置,以便他可以管理目前從這些報告中排除的工作流部分。鑑於兩個立即顯而易見的選擇
- 更改公司範圍內所有使用者的儀表板設置或
- 僅為 HVU 複製儀表板
…決定我應該創建一個“開發”實例,讓 HVU 可以看到他的儀表板的變體。為此,我將該系列移植到相同目錄樹中的
.rdl
另一個實例,並將相關數據集中的所有儲存過程從.ReportServer``Schema1``Schema1_dev
**問題:**儲存過程和安全模式都存在於同一台伺服器和數據庫上,因此不存在孤兒使用者的風險。除了通過 SSMS GUI 檢查之外,是否有可能/將所有目前使用者權限複製到的最佳方法是什麼
Schema1
?Schema1_dev
這應該給你一個開始。它假定您已經複製了所有相關對象,並且您的所有權限都在對像或模式級別(如果您具有列級別權限,腳本會變得更複雜一些,但還不錯)。
DECLARE @oldschema SYSNAME = N'schema1', @newschema SYSNAME = N'schema1_dev'; DECLARE @sql NVARCHAR(MAX) = N''; SELECT @sql += N' ' + p.state_desc + N' ' + p.[permission_name] + N' ON ' + QUOTENAME(@newschema) + N'.' + QUOTENAME(o.name) + N' TO ' + QUOTENAME(dp.name) + N';' FROM sys.database_permissions AS p INNER JOIN sys.objects AS o ON p.major_id = o.[object_id] INNER JOIN sys.schemas AS s ON o.[schema_id] = s.[schema_id] INNER JOIN sys.database_principals AS dp ON p.grantee_principal_id = dp.principal_id WHERE p.class_desc = N'OBJECT_OR_COLUMN' AND s.name = @oldschema; SELECT @sql += N' ' + p.state_desc + N' ' + p.[permission_name] + N' ON SCHEMA::' + QUOTENAME(@newschema) + N' TO ' + QUOTENAME(dp.name) + N';' FROM sys.database_permissions AS p INNER JOIN sys.schemas AS s ON p.major_id = s.[schema_id] INNER JOIN sys.database_principals AS dp ON p.grantee_principal_id = dp.principal_id WHERE p.class_desc = N'SCHEMA' AND s.name = @oldschema; PRINT @sql; -- EXEC sys.sp_executesql @sql;
請注意,如果您有很多對象和/或很多使用者,則