我的客戶正在開發一個安全項目,其中DBA tean以外的任何用戶具有數據庫或服務器級別/ dbo所有者權限的sysadmin並刪除所有SQL Server中的提升權限。在這樣做之前,我們想要備份安全性,以防萬一發生中斷。任何人都可以幫助腳本?我有sp_rev_login備份登錄,但想用一個非常簡單直接的解決方案。任何想法都歡迎。謝謝SQL Server中的備份用戶/登錄
回答
從Technet腳本中心截取的,這個腳本給我們的用戶,角色,對象權限以及
**--Server level Logins and roles**
SELECT sp.name AS LoginName,sp.type_desc AS LoginType, sp.default_database_name AS DefaultDBName,slog.sysadmin AS SysAdmin,slog.securityadmin AS SecurityAdmin,slog.serveradmin AS ServerAdmin, slog.setupadmin AS SetupAdmin, slog.processadmin AS ProcessAdmin, slog.diskadmin AS DiskAdmin, slog.dbcreator AS DBCreator,slog.bulkadmin AS BulkAdmin
FROM sys.server_principals sp JOIN master..syslogins slog
ON sp.sid=slog.sid
WHERE sp.type <> 'R' AND sp.name NOT LIKE '##%'
--Databases users and roles
DECLARE @SQLStatement VARCHAR(4000)
DECLARE @T_DBuser TABLE (DBName SYSNAME, UserName SYSNAME, AssociatedDBRole NVARCHAR(256))
SET @SQLStatement='
SELECT ''?'' AS DBName,dp.name AS UserName,USER_NAME(drm.role_principal_id) AS AssociatedDBRole
FROM ?.sys.database_principals dp
LEFT OUTER JOIN ?.sys.database_role_members drm
ON dp.principal_id=drm.member_principal_id
WHERE dp.sid NOT IN (0x01) AND dp.sid IS NOT NULL AND dp.type NOT IN (''C'') AND dp.is_fixed_role <> 1 AND dp.name NOT LIKE ''##%'' AND ''?'' NOT IN (''master'',''msdb'',''model'',''tempdb'') ORDER BY DBName'
INSERT @T_DBuser
EXEC sp_MSforeachdb @SQLStatement
SELECT * FROM @T_DBuser ORDER BY DBName
--Get objects permission of specified user database
USE <Database Name>
GO
DECLARE @Obj VARCHAR(4000)
DECLARE @T_Obj TABLE (UserName SYSNAME, ObjectName SYSNAME, Permission NVARCHAR(128))
SET @Obj='
SELECT Us.name AS username, Obj.name AS object, dp.permission_name AS permission
FROM sys.database_permissions dp
JOIN sys.sysusers Us
ON dp.grantee_principal_id = Us.uid
JOIN sys.sysobjects Obj
ON dp.major_id = Obj.id '
INSERT @T_Obj
EXEC sp_MSforeachdb @Obj
SELECT * FROM @T_Obj
樣本輸出:
DBName UserName AssociatedDBRole
PerformanceV3 public NULL
PerformanceV3 dbo db_owner
PerformanceV3 guest NULL
使用生成的腳本任務,並選擇用戶。將腳本另存爲文件作爲備份。
查找具有不應該的SA的登錄。
SELECT 'ALTER SERVER ROLE [sysadmin] DROP MEMBER [' + syslogins.name + '] GO;'
FROM sys.syslogins
WHERE syslogins.name NOT IN (<dba GROUP/logins>)
這應該足以生成remove SA。如果不想複製/粘貼,可以將輸出粘貼到臨時表並在其上運行光標以執行刪除。
我們正在爲大約1800個SQL Server創建20,000多個數據庫。我們正在嘗試提供某種自動化來備份安全性,然後再放棄用戶/登錄 – Ramya
@Ramya然後,您需要使用權限生成腳本對所有這些服務器進行多重查詢。其中,有幾個版本已經在這裏和這裏。您可以在SSMS中執行此操作,或設置一個簡單的應用程序,該應用程序從您的服務器列表中提取並將權限轉儲到文件或表中。但是,如果您正在運行SQL備份,則您的權限位於備份中,但聽起來您需要長時間安全備份。 –
你介意給我一些鏈接,以達到類似的要求嗎?我可以編寫一個ssis包來從所有服務器獲取數據。我只需要sql腳本來執行我的要求 – Ramya
- 1. 備份SQL Server登錄和用戶
- 2. SQL Server登錄和用戶?
- 3. SQL Server用戶登錄
- 4. 備份數據庫是否需要登錄和用戶備份
- 5. 用戶登錄失敗[sql server用戶]
- 6. 用戶登錄SQL Server 2005中表達
- 7. Sql server 2008中的備份
- 8. SQL Server 2005登錄,安全性,角色和權限備份
- 9. SQL Server VDI備份
- 10. 導出/備份SQL登錄信息
- 11. 使用ASP.NET備份SQL Server
- 12. sql server登錄windows身份驗證
- 13. SQL Server身份驗證登錄問題
- 14. SQL Server:安全性用戶登錄
- 15. SQL Server 2005(快速) - 登錄vs用戶
- 16. SQL Server用戶登錄失敗
- 17. 禁用Sql Server Windows登錄帳戶?
- 18. SQL Server登錄用戶名和密碼
- 19. SQL Server 2008用戶登錄失敗
- 20. 用戶Jboss AS7 SQL Server登錄失敗
- 21. 用戶SQL Server 2008登錄失敗
- 22. 無法創建SQL Server Express的登錄 - 用戶登錄失敗
- 23. 的SQL Server 2000 + ASP.NET:登錄失敗,用戶NT AUTHORITY \ ANONYMOUS登錄
- 24. SQL Server登錄
- 25. SQL Server 2000的備份
- 26. 添加登錄和連接使用SQL Server身份驗證SQL
- 27. SQL Server 2008中的備份 - 的日誌
- 28. 登錄SQL Server 2012中
- 29. ELMAH在SQL Server中登錄
- 30. 登錄失敗。詳細信息:28000:[Microsoft] [ODBC SQL Server驅動程序] [SQL Server]用戶'用戶'登錄失敗
我想備份用戶的安全性,以防萬一我需要安全回來我應該能夠恢復腳本。換句話說,創建具有相同安全性的用戶/登錄腳本 – Ramya