7

アプリケーション レベルのアクセス許可はアプリケーションではなくアプリケーションで管理されるため、使用しているアプリケーションが Windows 認証をネイティブにサポートしておらず、SQL サーバー上で作成される個々のログインに依存しているため、Active Directory グループから SQL サーバー上にユーザーを作成しようとしています。 SQL ロールを使用するよりも。このため、アプリケーションにアクセスする各ユーザーは、アプリケーション データベースが存在する SQL インスタンスに対して独自のユーザーを作成する必要があります。これにより、アプリケーション内でユーザーに個別の権限を割り当てることができます。

以下を使用して、指定した Active Directory グループからユーザーのリストを読み取っています。

exec master..xp_logininfo 'domain\groupname', 'members'

これにより、次のような出力が返されます。

account name    type  privilege  mapped login name  permission path
DOMAIN\USER     user  user       DOMAIN\USER        DOMAIN\GROUPNAME

ほとんどの場合、このリストに返されるユーザーは、問題なく SQL インスタンスで作成できます。sp_grantloginアプリケーション データベースへの新しいログイン アクセスを許可する前に、最初のインスタンスで使用する SQL アカウントとしてユーザーを作成しています。ただし、少数のユーザーが存在しないと報告されています。実行した結果、次のエラーが表示されますsp_grantlogin

Msg 15401, Level 11, State 1, Procedure sp_grantlogin, Line 49
Windows NT user or group 'DOMAIN\USER' not found. Check the name again.

明らかに、上記のエラー メッセージでは、実際のユーザー名を削除しています。xp_logininfoで作成できないユーザーを返すのはなぜsp_grantloginですか? 私が行方不明であることは明らかですか?

4

7 に答える 7

4

これは、ユーザーが管理者グループに属していないことを意味します。Active Directory が別の仮想マシンにあり、SQL Server が別の仮想マシンにある私のような問題がある場合。Active Directory ドメインを SQL Server 仮想マシンに参加させたら、SQL Server 仮想マシンで次の操作を行う必要があります。

  1. [ツール] --> [コンピューターの管理]に移動します。

  2. ウィンドウが開き、System Tools --> Local Users and Groups を展開します

  3. [グループ] をクリックすると、ウィンドウの右側の列にグループのリストが表示されます。

  4. Administratorをダブルクリックすると、新しいウィンドウが開き、リンクされたユーザーがその下にないことがわかります。

  5. [追加] をクリックすると、新しいウィンドウが開きます。ここでは、場所の下で、ドメインの場所を変更することを選択できます。

  6. [ Advanced]をクリックすると、ログイン プロンプトが開きます。管理者の仮想マシン アカウントでログインするだけです。

  7. すべてのフィールドをそのままにして[今すぐ検索] をクリックします。表示されたユーザーのリストから、Active Directory からインポートしたユーザーをダブルクリックし、[ OK ] をクリックします。

于 2014-06-16T03:20:40.487 に答える
1

非常によく似たケースで、同じエラー コード 15401 がありましたが、この場合、私が行っていたのは、ドメインから、SQL があるサーバーのグループにユーザーを追加することでした。そのため、同じ ROLE でグループを SQL エンジンに追加するだけです。

USE [master]
GO
CREATE LOGIN [localhost\Administrators] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
Msg 15401, Level 16, State 1, Line 3
Windows NT user or group 'localhost\Administrators' not found. Check the name again.

次に、リンクPRB: Use BUILTIN\Group to Grant Access to Predefined Windows NT Groups

問題が見つかったので、解決策は次のとおりです。

USE [master]
GO
CREATE LOGIN [BUILTIN\Administrators] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [BUILTIN\Administrators]
GO
Command(s) completed successfully.

これは、ログイン アカウントの数を減らし、SQL サーバーの役割に割り当てられたユーザー数をより管理しやすくするのに最適だと思います。

于 2016-08-14T04:23:31.737 に答える
1

を使用する前に、ログイン名の大文字と小文字を変更しますsp_grantloginか?

大文字と小文字を区別するサーバー照合がある場合は、AD ユーザーの大文字と小文字を正確に指定する必要があります。

次のようにして、サーバーの照合順序を見つけることができます。

select serverproperty('collation')

大文字と小文字を区別するサーバーの照合順序があり、大文字と小文字を区別しない場合は、xp_logininfo返されるものと AD の実際の大文字と小文字が一致しない可能性があります。その場合は、ケースのバリエーションでユーザーを作成してみてください。

いずれにも当てはまらない場合は、アカウントを調べてください。無効になっているか、ログインできますかなど. suser_sid() が null を返す場合、何らかの問題があるに違いありません。

于 2013-02-26T15:17:58.240 に答える
1

次のユーザーに対しても、このエラーに直面しました。

  1. AD で作成された
  2. 一部の SQL パーミッションを付与
  3. ADで改名

次に、この名前を変更した新しいユーザー アカウント名を同じサーバー/データベースに追加しようとすると、エラー メッセージ 15401、レベル 11、状態 1、プロシージャ sp_grantlogin、行 49 が表示されます。

http://support.microsoft.com/kb/324321/en-usの手順に従いましたが、このコマンドは名前を変更する前に古いユーザー アカウント名を返しました。

SELECT name FROM syslogins WHERE sid = SUSER_SID ('YourDomain\YourLogin')

YourDomain\OldLogin を返しました

exec sp_revokelogin 'YourDomain\OldLogin' を実行した後

問題が修正され、sp_grantlogin が正常に機能するようになりました。

PS 別のテスト方法として、別のサーバーから sp_grantlogin をリモートで実行することをお勧めします。成功するかもしれません。

于 2014-06-20T10:07:06.410 に答える