為SQL Server快照snapshot DB建立login訪問

guocun09發表於2019-05-20
為了提供sql server的報表查詢功能,通常在備庫mirror上建立定時snapshot job以提供web查詢。


但是眾所周知的是快照DB只讀不可寫,所以直接在備庫建立login mapping及賦許可權時會報錯:
USE [WEB02]
GO
CREATE USER [test] FOR LOGIN [test]
GO
USE [WEB02]
GO
EXEC sp_addrolemember N'db_datareader', N'test'
GO

Failed to update database "WEB02" because the database is read-only. (Microsoft SQL Server, Error: 3906)


建立方法:
1.先在主庫建立login及mapping對應db的user


2.查詢主庫中新建login的sid
執行:
select name,sid from sys.server_principals 

或 select name,sid from sys.sql_logins


3.然後備庫中新建login,並設定sid等於主庫login的sid
USE [master]
GO
CREATE LOGIN [test] WITH PASSWORD=N'test', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF sid=0xA366990EC2C0EE47B8826E5DAB5851CD
GO


至此完成,

下次重新整理建立快照後,login及user相關許可權即可和主庫同步,也就可以使用login訪問快照DB了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25583515/viewspace-2644981/,如需轉載,請註明出處,否則將追究法律責任。

相關文章