Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 更改数据库服务器上现有SQL用户的登录名(Windows用户)_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql server 更改数据库服务器上现有SQL用户的登录名(Windows用户)

Sql server 更改数据库服务器上现有SQL用户的登录名(Windows用户),sql-server,sql-server-2012,Sql Server,Sql Server 2012,我们有一个SQL 2012数据库,我们的用户通过Windows身份验证设置为连接到特定的数据库,比如DatabaseA 它看起来是这样的:Windows用户“DomainA/abcd”被映射到数据库a中的一个用户“abcd”,该用户拥有一个默认的架构“abcd”,而该架构又拥有一组表。远程用户登录到他们的笔记本电脑(作为DomainA/abcd),通过VPN连接,并能够从SQL server查询数据(他们根据自己的Windows登录从默认模式中提取数据) 这一切都很好,但是,现在我们正在进入一个

我们有一个SQL 2012数据库,我们的用户通过Windows身份验证设置为连接到特定的数据库,比如DatabaseA

它看起来是这样的:Windows用户“DomainA/abcd”被映射到数据库a中的一个用户“abcd”,该用户拥有一个默认的架构“abcd”,而该架构又拥有一组表。远程用户登录到他们的笔记本电脑(作为DomainA/abcd),通过VPN连接,并能够从SQL server查询数据(他们根据自己的Windows登录从默认模式中提取数据)

这一切都很好,但是,现在我们正在进入一个新的领域

我们的用户将以“DomainB/abcd”登录,当他们尝试连接到服务器上的表时,不会返回任何数据,因为“DomainA/abcd”和“DomainB/abcd”是不同的用户

我想实现什么:我可以让当前映射到Windows登录名“DomainA/abcd”的DB用户“abcd”指向Windows登录名“DomainB/abcd”吗。这可能吗

如果没有,还有什么选择。我们希望避免删除模式/表和用户,然后重新创建所有内容

我尝试了什么:我尝试了
ALTER USER
sp\u change\u users\u login
,但没有成功

ALTER USER[DomainB\abcd]WITH LOGIN=[abcd]
返回
无法将用户重新映射到登录名'abcd',因为该登录名已映射到数据库中的用户。
-非常合理

EXEC sp\u change\u用户登录“Update\u One”、“abcd”、“DomainB\abcd”;GO
返回
终止此过程。用户名“abcd”不存在或无效。
-表示这可用于将db用户映射到新的SQL登录,但未提及Windows登录


我是DB server上sysadmin角色的成员,因此我认为这不是权限问题。

当SQL server用户域名更改时,此时,我们仍希望保留当前数据库用户设置,不希望重新创建这些用户,我们可以使用SQL脚本更新用户域,如下所示:

ALTER USER [abcd] WITH LOGIN = [DomainB\abcd], NAME = [abcd]

我很高兴这对你有用。

你必须先删除
用户
[DomainA\abcd]
,然后才能
创建
用户
[DomainB\abcd]
登录
abcd
@Lamu-在我删除
用户[DomainA\abcd]
之后,创建
用户[DomainB\abcd]
,它仍然不允许我将
abcd
[DomainB\abcd]
关联,不断告诉我
abcd
映射到了另一个用户。然后
用户[DomainA\abcd]
没有像您的问题所述映射到
abcd
。因此,它映射到哪个用户?
从sys.syslogins l中选择dp.[name]加入sys.database_principals dp on l.sid=dp.sid,其中l.[name]=N'abcd'
return?@Lamu-您使用
…其中l.[name]=N'abcd'
的查询不返回任何内容,但使用
…其中l.[name]=N'DOMAINA\abcd'
返回
abcd
本质上,登录名是
DOMAINA\abcd
,主体是
abcd