Sql 为什么要在';dbo';

Sql 为什么要在';dbo';,sql,sql-server,principal,Sql,Sql Server,Principal,在数据库设计中,用户“fed”与登录名“fed”进行比较 USE [Design] SELECT l.name AS login_name, p.name AS [user_name] FROM sys.sql_logins l JOIN sys.database_principals p ON l.SID = p.SID WHERE l.name = 'fed' 为什么在设计数据库上“fed”登录下的请求选择“dbo” USE [Design] SELECT USER AS user_na

在数据库设计中,用户“fed”与登录名“fed”进行比较

USE [Design]
SELECT l.name AS login_name, p.name AS [user_name]
FROM sys.sql_logins l JOIN sys.database_principals p ON l.SID = p.SID
WHERE l.name = 'fed'

为什么在设计数据库上“fed”登录下的请求选择“dbo”

USE [Design]
SELECT USER AS user_name
先读一读:

您将登录与用户混淆。第一个查询是检查登录信息,而第二个查询是查看用户。多个登录可以映射到单个用户,这使得事情更易于管理,例如管理员都映射到数据库所有者用户“dbo”

编辑
只是为了澄清,仅仅因为您将列命名为user\u name
p.name为[user\u name]
并不意味着它是。您正在通过sys.sql\u logins进行链接,因此您正在检索的“主体”是登录对象,谁的
name
属性显然是登录名,而不是
用户

,因此当您运行第二段sql时,您是否作为fed连接?老实说,我不知道select user在做什么。如果我想要当前用户的用户名,那么选择SUSER_name()或选择System_user将是options。thx SUSER_name()返回'fed',但为什么选择user返回'dbo',所有内容都显示得很简单。登录名“fed”具有sysadmin服务器角色。因此,sa始终映射到dbo。