我正在努力更好地理解用户与用户之间的区别。登录。我知道如何创建它们,我知道它们是必需的,但我还不了解SQL Server如何使用这种区别。
据我所知,登录可以访问服务器,而用户可以访问数据库及其对象。
如果我执行以下操作:
CREATE LOGIN fred WITH PASSWORD='…';
USE stuff;
CREATE USER wilma FOR LOGIN fred;
USE nonsense;
CREATE USER pebbles FOR LOGIN fred;
然后我登录fred
,其中两个用户名与两个数据库相关联。我的猜测是这些用户名可以被视为fred
的别名。
我认为通常使用与登录名相同的用户名,但显然不是必需的。
下一步是以fred
登录。我无法以其中一个用户身份登录。
此时,我看不到接下来会发生什么。我如何成为用户之一,为我做什么?
答案 0 :(得分:3)
您永远不会以用户身份进行身份验证。
您作为登录进行身份验证,然后映射到零个或多个数据库中的单个用户。
创建登录
CREATE LOGIN fred WITH PASSWORD='fredsecret', CHECK_POLICY = OFF;
GO
创建用户
USE stuff;
CREATE USER wilma FOR LOGIN fred;
GO
USE nonsense;
CREATE USER pebbles FOR LOGIN fred;
GO
更改背景,使其看起来像我的弗雷德
SELECT SUSER_SNAME() --gbn
EXECUTE AS LOGIN = 'fred'
SELECT SUSER_SNAME() --fred
注意差异
USE stuff
SELECT SUSER_SNAME(), USER_NAME()
USE nonsense;
SELECT SUSER_SNAME(), USER_NAME()
GO
然后回到我身边
REVERT
登录名(本例中为fred
)仅用于对SQL Server进行身份验证。身份验证后,您主要使用sid
值:链接登录(服务器主体)和用户(数据库主体)
SELECT name, sid FROM sys.server_principals
USE stuff
SELECT name, sid FROM sys.database_principals
USE nonsense
SELECT name, sid FROM sys.database_principals
就我而言,它是0xC7C14DE4BFDF2445A7DABE158CC399F0
注意,sid在数据库中是唯一的。这将失败
USE nonsense;
CREATE USER barney FOR LOGIN fred;
GO
Msg 15063,Level 16,State 1,Line 10 登录已有一个不同用户名的帐户。
答案 1 :(得分:0)
您在登录时连接到服务器,基本内容将是CURRENT_USER wilma和废话CURRENT_USER = pebbles