2017-10-11 28 views
1

私はユーザ間の区別をよりよく理解しようとしています&ログイン。私はそれらを作成する方法を知っており、それらが必要であることを理解していますが、SQL Serverがこの区別をどのように使用しているかはまだ分かりません。 ユーザーは、データベースおよびそのオブジェクトへのアクセス権を持っていながら、SQL Server:ユーザーとログイン - ユーザー名はどこに入りますか?

は、私の知る限り理解し、ログインは、サーバーへのアクセス権を持っています。

CREATE LOGIN fred WITH PASSWORD='…'; 

USE stuff; 
CREATE USER wilma FOR LOGIN fred; 

USE nonsense; 
CREATE USER pebbles FOR LOGIN fred; 

は、その後私は2つのデータベースに関連付けられた2人のユーザー名と fredのログインを持っている:私は、次のコマンドを実行した場合

。私の推測では、これらのユーザー名はfredの別名と見なすことができます。

私は、ログイン名と同じユーザー名を使用するのが一般的ですが、明らかに必要ではないことがわかりました。

次の手順は、fredとしてログインすることです。私はユーザーの1人としてログインできません。

この時点では、次に何が起こるかわかりません。どのようにしてユーザーの1人になれるのですか?

答えて

3

あなたはユーザーとして決して認証されません。
ログインとして認証され、0以上のデータベースで1人のユーザーにマッピングされます。

私はフレッド

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 
てるように見えるので、ユーザー

USE stuff; 
CREATE USER wilma FOR LOGIN fred; 
GO 

USE nonsense; 
CREATE USER pebbles FOR LOGIN fred; 
GO 

変更コンテキストを作成し、ログイン

CREATE LOGIN fred WITH PASSWORD='fredsecret', CHECK_POLICY = OFF; 
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 

メッセージ15063、レベル16、状態1、行10 失敗します。

0

あなたはCURRENT_USERのウィルマとナンセンスCURRENT_USERになりますベースのもので、ログインの下でサーバーに接続=小石

関連する問題