web-dev-qa-db-ja.com

ログインへのマッピングなしで作成されたユーザーへのログインのマッピング

この質問は以前に尋ねられましたが、私は答えを見つけませんでした( https://stackoverflow.com/questions/6468813/assign-a-login-to-a-user-created-without-login- sql-server

GUIの「ログインなしのSQLユーザー」ユーザータイプオプションを使用してユーザーが最初に作成された場合、ログインをユーザーにどのようにマッピングしますか? SQL Server 2012を使用しています

6
user3469285

SSMSのユーザー作成ダイアログでログインなしのSQLユーザーを選択すると、生成されるT-SQLになります(ユーザー名以外のオプションは提供されません)。

USE [AdventureWorks2012]
GO
CREATE USER [User1] WITHOUT LOGIN
GO

次のように、ログインを作成し、新しいログインでユーザーを変更しようとした場合:

create login TestLogin1
with password = 'p@$$w0rd';
go

use AdventureWorks2012;
go

alter user User1
with login = TestLogin1;
go

次のエラーが発生します。

メッセージ33016、レベル16、状態1、行8
ユーザーをログインに再マップすることはできません。再マッピングは、WindowsまたはSQLログインにマップされたユーザーに対してのみ実行できます。

そのため、ログインを再作成せずにこのタイプのユーザーにリンクをリンクすることはできないと思います。ユーザーをスクリプト化するだけで比較的簡単ですが、パラメーターをWITHOUT LOGINから、マッピング先のログインに変更します。

[〜#〜] edit [〜#〜]:以下のAaronによって指摘されているように、変更を行う前に、権限とロールメンバーシップに注意してください。それが望ましい動作である場合は、現在のアクセス許可の状態に戻れるようにする必要があります。

6
Thomas Stringer

Thomas Stringer answer に記載されているように、何らかの理由でこれらのタイプのユーザーを「代替ユーザー」を使用して再リンクすることはできません。

検査により、sys.database_principals.authentication_type = 0または1(場合によってはその他)の場合、SSMSダイアログには「SQLユーザーログインなし」と表示されます。

select * from sys.database_principals where name = 'TempUser';

ブルートフォースも機能しないことに注意してください:

update sys.database_principals 
set authentication_type = 3 -- 3=Windows
where name = 'TempUser';

エラー:システムカタログへのアドホック更新は許可されていません。

特定のデータベースでは、スキーマのみをプッシュして一方の方向に変更し、データベース全体を別の方向にプルすることが一般的である環境が必要になる場合があります。

  For Dev -> build -> stage -> prod only schema
  For prod -> Dev, entire DB (for debugging, extra logins on Dev)

データベース自体にすべてのユーザーが含まれるため、差分(Redgateなど)リストは0に近くなります。オブジェクトに対する権限は、RedGateなどの差分ツールの各オブジェクトとともにリストされる傾向があります。また、一部のユーザーは、SPの「実行」としてリストされる場合があります。

0
crokusek