--花了点时间搜罗了网上的相关文章,然后作了简单汇总,以方便查阅
--1、在主库上建立用户并查询出SID,用于辅库上创建同步用户
use tsdb
GO
select [sid] from sys.syslogins where name='user'
GO
use master
select [sid] from sys.syslogins where name='user'
或
SELECT * FROM [dbName]..sysusers
--2、在辅库上创建同步用户,使用主库用户的SID,以继承访问许可
CREATE LOGIN [user] WITH PASSWORD = 'password',
SID = 0x00000000000000000000000000000000, --从上面的查询从获取
DEFAULT_DATABASE = [tsdb], --默认数据库
CHECK_EXPIRATION = OFF, --强制密码过期 关闭
CHECK_POLICY = OFF --强制密码策略 关闭
--网上传的两位大神的脚本和导出语句,原本不改罗列如下,
--方法一
--先在主库创建好用户,并用以下脚本创建2个存储过程(sp_help_revlogin和sp_hexadecimal)
--然后执行sp_help_revlogin存储过程,在结果里找到所需创建用户的语句并复制该语句到副库执行以创建同步用户
1.在主服务器添加自定义登陆用户,比如TestUser
2.在主服务器执行如下SQL,在master数据库创建存储过程sp_hexadecimal,sp_help_revlogin
创建sp_help_revlogin存储过程
3.执行sp_help_revlogin存储过程,在得到的结果文本里,找到TestUser相关的那条创建用户的脚本。
4.复制该脚本至其他副本数据库执行
USE master
GO
IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
DROP PROCEDURE sp_hexadecimal
GO
CREATE PROCEDURE sp_hexadecimal
@binvalue varbinary(256),
@hexvalue varchar (514) OUTPUT
AS
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
DECLARE @tempint int
DECLARE @firstint int
DECLARE @secondint int
SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
SELECT @firstint = FLOOR(@tempint/16)
SELECT @secondint = @tempint - (@firstint*16)
SELECT @charvalue = @charvalue +
SUBSTRING(@hexstring, @firstint+1, 1) +
SUBSTRING(@hexstring, @secondint+1, 1)
SELECT @i = @i + 1
END
SELECT @hexvalue = @charvalue
GO
IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
DROP PROCEDURE sp_help_revlogin
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name sysname
DECLARE @type varchar (1)
DECLARE @hasaccess int
DECLARE @denylogin int
DECLARE @is_disabled int
DECLARE @PWD_varbinary varbinary (256)
DECLARE @PWD_string varchar (514)
DECLARE @SID_varbinary varbinary (85)
DECLARE @SID_string varchar (514)
DECLARE @tmpstr varchar (1024)
DECLARE @is_policy_checked varchar (3)
DECLARE @is_expiration_checked varchar (3)
DECLARE @defaultdb sysname
IF (@login_name IS NULL)
DECLARE login_curs CURSOR FOR
SELECT p.sid, p.name, p.type, p.is_disabled, p