我使用以下命令在我的数据库中创建一个用户:
CREATE USER Test WITHOUT LOGIN
我使用测试名称创建了一个登录名。
我想将测试用户与测试登录链接。
当我使用以下命令时:
EXEC sp_change_users_login 'Update_One', 'Test', 'Test'
SQL Server 引发以下错误:
Msg 15291, Level 16, State 1, Procedure sp_change_users_login, Line 114
Terminating this procedure. The User name 'Test' is absent or invalid.
当我使用以下命令时:
ALTER USER Test WITH LOGIN = Test
SQL Server 引发波纹管错误:
Msg 33016, Level 16, State 1, Line 2
The user cannot be remapped to a login. Remapping can only be done for users that were mapped to Windows or SQL logins.
如何将测试用户与测试登录链接。
此链接的目的:我想将数据库从服务器还原到另一台服务器,并在完成还原后,映射具有服务器上现有登录名的用户。
提前致谢。
WITHOUT LOGIN
事后无法将显式创建的用户映射到登录名。使用登录名创建然后失去关联的用户,例如因为数据库被移动到另一台服务器,可以通过首先创建新登录名(任何名称)然后使用
ALTER USER ... WITH LOGIN = ...
命令来重新映射。为了演示,我将创建一个数据库
tst
,然后在其中创建一个登录名tstlogin
和关联用户:tstuser
tst
为了显示正确的关联,我们可以使用以下查询:
这导致
现在我们将放弃登录
tstlogin
并重新检查我们的用户:
它不再显示关联的登录名:
下一步是创建一个新的登录。(出于演示目的,我选择了一个不同的名称,但它也可以是相同的名称。)
要将新登录名与我们的用户相关联,我们可以使用以下
ALTER USER
语句:再次检查关联:
说明
ALTER
语句成功:如果您确实需要将“
WITHOUT LOGIN
”用户更改为“使用登录”用户,则必须删除该用户并重新创建它。确保在这种情况下首先编写权限脚本,因为删除用户会导致 SQL Server 忘记这些权限。