Alwayson辅助副本上如何创建同步账号

alwayson的辅助副本无法创建数据库用户, 这点比较致命。 

但是否无法创建数据库用户了呢?也不是, 不过只能在主副本创建登录名和数据库用户, 然后在辅助副本上设置相同sid的登录名。


方法一:sid

具体步骤如下:

步骤1:查看主库上该账号的sid

查看语句为:

SELECT * FROM [dbName]..sysusers

或者:

select [sid] from sys.syslogins where name='xxx'

步骤2:在副本数据库上创建对应账号。

创建语句为:

CREATE LOGIN [帐号] WITH PASSWORD = '?',
SID = ?,	--从上面的查询从获取
DEFAULT_DATABASE = [数据库名称],	--默认数据库
CHECK_EXPIRATION = OFF,				--强制密码过期 关闭
CHECK_POLICY = OFF					--强制密码策略 关闭

其中 sid对应的值是主库上所查到的sid的值。


方法二:高总的脚本

--导出登录脚本  注:可用于 alwayson 辅助副本同步密码或者服务器迁移。
SELECT  'CREATE LOGIN [' + p.name + '] '
       + CASE WHEN p.type IN ( 'U', 'G' ) THEN 'FROM windows '
              ELSE ''
         END + 'WITH ' + CASE WHEN p.type = 'S'
                              THEN 'password = '
                                   + master.sys.fn_varbintohexstr(l.password_hash)
                                   + ' hashed, ' + 'sid = '
                                   + master.sys.fn_varbintohexstr(l.sid)
                                   + ', check_expiration = '
                                   + CASE WHEN l.is_expiration_checked > 0
                                          THEN 'ON, '
                                          ELSE 'OFF, '
                                     END + 'check_policy = '
                                   + CASE WHEN l.is_policy_checked > 0
                                          THEN 'ON, '
                                          ELSE 'OFF, '
                                     END
                                   + CASE WHEN l.credential_id > 0
                                          THEN 'credential = ' + c.name
                                               + ', '
                                          ELSE ''
                                     END
                              ELSE ''
                         END + 'default_database = '
       + p.default_database_name
       + CASE WHEN LEN(p.default_language_name) > 0
              THEN ', default_language = ' + p.default_language_name
              ELSE ''
         END
FROM    sys.server_principals p
       LEFT JOIN sys.sql_logins l
       ON p.principal_id = l.principal_id
       LEFT JOIN sys.credentials c
       ON l.credential_id = c.credential_id
WHERE   p.type IN ( 'S', 'U', 'G' )
       AND p.name NOT IN ( 'sa')
               AND p.name NOT LIKE '%##%'
               AND p.name NOT LIKE '%NT SERVICE%'
               AND p.name NOT LIKE '%NT AUTHORITY%'


方法三:

点击打开链接

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值