我正在SQLServerManagementStudio2018中执行一个SQL脚本。在我的脚本中,我需要指定一个用户(包括域--不确定是否需要服务器名)。
因此,我创建了一个用户sam,将用户类型设置为SQL user without login,将用户角色设置为db_datareader和db_datawriter。
然后我执行我的脚本,但是它给了我错误:User or role 'MHT.sam' does not exist in this database.
但我几乎可以肯定,我已经将这个用户添加到数据库中(请参阅下面的图片以进行二次检查)。Is我的用户和域名格式正确吗?你认为我做错了什么?

这里是我的域和服务器:

发布于 2018-03-19 10:52:47
您可能正在混合Server登录和数据库用户。
Server登录是允许用户连接到Server实例的帐户。Server登录可以是.
这类帐户的例子如下:
在具有图形用户界面的(SSMS)中创建用户时,首先要创建Server登录(Windows身份验证或Server身份验证)。
现阶段的不同之处是:
当您填写了初始信息后,通常会切换选项卡并配置User映射S。
在“用户映射”选项卡中,将Server登录名映射到数据库用户。在大多数情况下,您将对数据库用户使用相同的名称。在其他情况下,您可能会创建一个完全不同的名称。
重要事项:数据库用户在数据库中拥有权限/权限。Server登录可以访问Server实例。
...you将权限/权限分配给数据库用户sam。但是,sam不知道他链接到SQL login MHT\sam,这并不重要,因为您将数据库权限/权限分配给数据库用户,而不是SQL Server登录。
sam和MHT\sam之间的差异
当您(或其他人)创建MHT\sam Server身份验证登录时,在切换到User映射部分后,数据库用户被截断为sam。
SQL服务器Windows身份验证登录\ General

这是决定您是要创建本机Server登录还是Windows身份验证登录的位置。
SQL服务器Windows身份验证登录区用户映射

这是将Server登录链接到新创建的数据库用户或将Server登录链接到已经存在的数据库用户的位置。
exec sp_addrolemember N'RunStoredProcedure', N'sam'
go
exec sp_addrolemember N'MonitoringRole', N'sam'
goServer身份验证的登录MHT\sam链接到数据库用户sam,数据库用户D38现在已被授予数据库角色RunStoredProcedure和MonitoringRole。当MHT\sam登录到Server实例并连接到他的数据库时,他拥有分配给数据库用户sam的权限/权限。
https://dba.stackexchange.com/questions/201645
复制相似问题