SQL Server:用户&登录 - 用户名在哪里?

时间:2017-10-11 06:58:45

标签: sql-server login

我正在努力更好地理解用户与用户之间的区别。登录。我知道如何创建它们,我知道它们是必需的,但我还不了解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登录。我无法以其中一个用户身份登录。

此时,我看不到接下来会发生什么。我如何成为用户之一,为我做什么?

2 个答案:

答案 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