1

SQL Server 2008 R2 への Windows 認証権限を持つ管理者としてログインすると、次のコマンドが実行されます。

var sqlAdapter = 
    new SqlDataAdapter(@"select dtb.name as [Name],
                                CAST(case when dtb.name in ('master','model','msdb','tempdb') then 1 
                                          else dtb.is_distributor end AS bit) AS [IsSystemObject]
                         from model.sys.databases dtb", connection);
sqlAdapter.Fill(table);

しかし、sp_datareader 権限のみを持つ datareader としてログインしようとすると、例外が発生します。

サーバー プリンシパル "datareader" は、現在のセキュリティ コンテキストではデータベース "model" にアクセスできません。

アダプターを作成する前にユーザー権限を確認する方法はありますか? たとえば、ユーザーが特定のデータベースにしかアクセスできない場合、またはデータベースのみがそれらのデータベースを表示 (またはロード) する場合は? ユーザーが完全な権限を持っている場合は、ここに書いたアダプターのコマンドを実行します。私の質問が簡単に理解できない場合は、できる限り明確にしようと思いますので教えてください。

ありがとうございました

4

2 に答える 2

0

わかりました。コマンドを次のように変更しました。

select dtb.name as [Name],
CAST(case when dtb.name in ('master','model','msdb','tempdb') then 1 
else dtb.is_distributor end AS bit) AS [IsSystemObject]
from sys.databases dtb

モデルを削除し、現在はsys.databasesのみになっています。モデルでユーザーマッピングを行う必要がないため、これは機能しています。ただし、それでも、現在のユーザーがアクセス許可を持っているデータベースのみを返すことができるクエリがあると便利です。

于 2013-01-17T18:53:34.760 に答える
0

ユーザーは、「ユーザー マッピング」の下で、データベース (モデル) に対する「 db_datareader 」権限を持っている必要があります。

セキュリティ->ログイン-> " datareader " (ユーザー) を右クリック->プロパティ->ユーザー マッピング

データベース (あなたの場合はモデル) を選択し、下にある db_datareader ロールを確認します。

于 2013-01-17T15:30:25.650 に答える