SQL数据库迁移完后,原来帐号无法访问数据库,我遇到孤立用户了?
|
admin
2026年1月18日 20:45
本文热度 31
|
帮客户做完SQL数据库从2012升级迁移到2016后,发现原来应用连接数据的账号却无法登录连接数据库,导致应用无法正常运行。当我用sa账号登录数据库后,查看迁移过来的数据库中是有这个帐号的,但是整个SQL实例中没有这个帐号。经过分析:原来SQL Server的用户管理有两层,SQL实例有一层,即在整个实例的“安全性”中,也是登陆账户;另一层在数据库中,即数据库中的“安全性”,也是数据库账户。这两种账户的关系:就好比你在一橦写字楼上班的时候,进公司所在的大楼时要刷一次脸,这是登陆帐户;然后公司在20层,你进公司的时候还要再刷一次脸,这是数据库账户。你进了写字楼,不能随便跑别的公司去上班,别人公司也识别不了你人脸信息;如果你连大楼都进不了,更别说进公司的门了,那你便成了“孤立账户”。Use adventureworks2016exec sp_change_users_login 'report'
上面的问题,既然知道是因为在新的数据库只有数据库帐户而没有登陆账户导致的孤立帐户问题,那直接创建这个丢失的登陆帐户了?当我在新的数据库上创建这个用户的时候,又出现了如下报错:此处不能直接通过重建登陆帐户解决,而是需要建立一个“登陆账户”,并关联“登陆账户”和“数据库账户”。建一个数据库帐户一样的登陆帐户test,先不设置该“登陆账户”的数据库访问和数据角色,登陆账户密码一般也与孤立账户相同,然后通过如下SQL语句连接“登陆账户”和“数据库账户”。Use adventureworks2016exec sp_change_users_login 'update_one', 'test', 'test'
这样在执行“exec sp_change_users_login 'report'”就不会看到孤立账户“test”了。至此,数据库的应用账号也可以正常登陆使用数据库了。注意:在数据库迁移的时候,大多时候我们不迁移系统数据库:Master,msdb等,但是登陆帐号默认都是放在master数据库中,所以涉及到迁移后,帐号相关的问题,大多和master数据相关。本文中的孤立账户问题,实际也是没有迁移master数据库所导致。
阅读原文:原文链接
该文章在 2026/1/19 10:50:29 编辑过