SQL:没有登录名的名称

SQL:没有登录名的名称

我注意到,当我打开 SQL Server Enterprise Manager 并导航到特定 DB 下的用户列表时,我发现用户有“名称”,但有些没有“登录名”值。这是什么意思?这是否意味着

1)用户根本无法登录服务器?

2)它是一个系统ID(或应用程序ID,因此没有用户能够使用它登录,只有应用程序可以使用它来访问数据库?)

3)有单点登录,所以一旦用户登录服务器,他们就可以访问数据库而无需再次进行身份验证?

我的第二个问题与企业管理器中“安全”组下的用户有关。假设“a”在这里,并且“a”也存在于数据库用户中,则意味着“a”可以访问和更改数据库中的数据,对吗?但是,如果“b”在安全组中但不在数据库用户中,则意味着它无法登录数据库,而只能对服务器进行更改?

我的第三个问题:如果默认数据库是主数据库,是否意味着该用户可以对所有数据库进行更改?

非常感谢所有回答我的问题的人!

答案1

数据库登录名和数据库用户不同。基本上,登录名被授予对服务器的权限,而用户被授予对数据库的权限。登录名映射到数据库。

我猜想数据库中的用户未映射到登录名的原因在于您已从另一个 SQL Server 还原数据库,但未复制登录名。基本上有两种方法可以解决此问题修复孤立用户。您可以使用sp_change_users_login,或者您可以在服务器之间复制登录信息因此与 sid 匹配。

如果您想使用单点登录方法,则可以通过与 Active Directory 集成来实现创建 Windows 登录而不是使用 SQL 登录。

是的,您可以将登录名映射到多个数据库。您可以GRANT让用户访问每个数据库的不同对象,或者将用户添加到数据库角色。还有服务器范围的角色将授予登录名对数据库的访问权限,sysadmin 角色就是很好的例子。为登录名设置默认数据库不会授予该登录名在数据库中的任何权限。您会发现登录名默认位于公共组中,这为他们提供了对 master 和 tempdb 的非常低级别的访问权限。

您需要明确授予登录数据库的访问权限。您可以使用附加用户。如果您在企业管理器中创建用户,那么登录名将与用户名匹配,但不必如此,存储过程允许您设置不同的用户名。
此代码示例演示了差异:

SELECT USER  --database user
SELECT SYSTEM_USER  --login

我不知道 DB2,但是 Oracle 没有登录和用户的概念。

相关内容