列出孤立帐号
use 数据库名称
exec sp_change_users_login 'REPORT'
自动创建同名的登录名
exec sp_change_users_login 'AUTO_FIX','用户名'
如果登录名已存在,则可关联
exec sp_change_users_login 'UPDATE_ONE','用户名','登录名'
以上方法仅限于数据库可读写情况,对于只读数据库,比如日志镜像数据库,孤立用户不可直接关联登录名,因为需要在只读库中写入权限数据。
因此需要手动关联用户名和登录名,他们之间的关联不是通过名称关联的,而是登录标识符。
以数据库日志镜像为例,我们首先在主库上创建好帐号和权限。同时获取登录标识符。
例如,要同步的登录名是my_read。以下是获取登录标识符的方法。
select [sid] from sys.syslogins where name='my_read' -- 返回:0xA00805D9B94B2E4082F4404C577A33B1
待数据同步至从数据库,则从数据库上会自动出现一个孤立帐号”my_read”。

此时莫慌。现在,再在从数据库上创建登录名,创建时指定从主库上复制过来的登录标识。
CREATE LOGIN my_read WITH PASSWORD = '登录密码', SID = 0xA00805D9B94B2E4082F4404C577A33B1, -- 登录标识符,关键 DEFAULT_DATABASE = [dbname], --默认数据库 CHECK_EXPIRATION = OFF, --强制密码过期 关闭 CHECK_POLICY = OFF --强制密码策略 关闭
此时,用户不再是孤立的了。主库上的权限也可正常生效。
