5

SQL Server 2012 のデータベース セキュリティ フォルダーにあるユーザーの 1 人のパスワードを更新する必要があります。残念ながら、社内に DBA がいないため、助けが必要です。この SQL Server に対する sysadmin 権限を持っていると言われましたが、データベース内のユーザーのパスワードを更新する場所が見つかりません。これをグーグルで検索すると、msdn は SQL Server 2012 ボックスでログインを更新する方法を示してくれましたが、このユーザーはこのサーバーの Security\Logins フォルダーの下には表示されませんが、このユーザーは database\Security\Users フォルダーの下にのみ表示されます。

ALTER LOGIN username WITH PASSWORD = 'password';コマンドを試しましたが、次のエラーしか表示されませんでした。

メッセージ 15151、レベル 16、状態 1、行 2

ログイン 'ATM' が存在しないか、権限がないため、変更できません。

ヘルプ/指示をいただければ幸いです。ありがとう。

4

1 に答える 1

14

これは、ログインユーザーの違いと、それらが互いにどのように関係するかです。

  • ログイン - エンティティが SQL Server インスタンスに接続できるようにするインスタンス レベルのプリンシパル。それらは、その性質上、インスタンス上のデータベースへのアクセスを許可しません。これに対する例外は、sysadmin 権限を持つログインは、sysadmin であるためデータベースを使用できますが、sysadmin レベルの権限があるためです。
  • ユーザー - エンティティが SQL Server データベースに接続できるようにするデータベース レベルのプリンシパル。ユーザーは SID を介してログインに関連付けられ、2 つの間の関係が作成され、ログインがインスタンスに接続し、関連付けられたユーザーを使用してデータベースに接続できるようになります。

復元時に SQL 認証ログインとデータベース ユーザーでよく発生するのは、SIDS が同期されていないか、データベース内のユーザーのログインが存在しないため、関係が壊れることです。この関係は、そのログインを使用してデータベースに接続する前に修復する必要があります。SQL Server から見ると、これらのプリンシパルは接続されていないためです。ログインが存在しない場合は、最初に作成してユーザーに関連付ける必要があります。

--Windows login (Active Directory pass through)
CREATE LOGIN [DOMAIN\foo] FROM WINDOWS;

--SQL Authenticated 
CREATE LOGIN [foo] WITH PASSWORD='5+r0ngP@55w0rd';

ログインが存在したら、それをユーザーに関連付けます。

ALTER USER [foo] WITH LOGIN=[foo]

データベースのコンテキストで次のクエリを使用して、オーファンを確認できます。

select
    dp.name [user_name]
    ,dp.type_desc [user_type]
    ,isnull(sp.name,'Orhphaned!') [login_name]
    ,sp.type_desc [login_type]
from   
    sys.database_principals dp
    left join sys.server_principals sp on (dp.sid = sp.sid)
where
    dp.type in ('S','U','G')
    and dp.principal_id >4
order by sp.name
于 2013-11-05T19:46:16.033 に答える