导航

SQL SERVER alwayson 辅库 创建数据库用户(转)

Posted on 2020-03-18 01:09  yiyishuitian  阅读(1107)  评论(0)    收藏  举报
alwayson的辅助副本无法创建数据库用户, 这点比较致命。 

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



方法一:sid
具体步骤如下:

步骤1:在主库中执行以下语句
查看主库上该账号的sid 查看语句为: use 主库存数名字
SELECT * FROM [dbName]..sysusers 或者:
use 主数据库名字
select [sid] from sys.syslogins where name='xxx' 步骤2:在副本数据库上创建对应账号。 创建语句为: use master 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%' ———————————————— 版权声明:本文为CSDN博主「吉普赛的歌」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/yenange/article/details/49756233

 

转自:https://blog.csdn.net/yenange/article/details/49756233