9

有効なアクセス許可とは、SQL Server Management Studioでデータベースのプロパティに移動し、[アクセス許可]をクリックして、[有効な]タブをクリックしたときに表示されるアクセス許可を指します。

これまでのところ、次のコードを使用して明示的なアクセス許可を決定することができました。

using Microsoft.SqlServer.Management.Smo;
...
DatabasePermissionInfo[] permissions = database.EnumDatabasePermissions("username");

ただし、有効な権限を取得する必要があります。このシナリオでは、ユーザーのログインを追加し、ユーザーマッピングを介してデータベース の役割db_datareaderとデータベースの役割をユーザーに与えました。db_datawriter

データベースのアクセス許可では、リストされている有効なアクセス許可はとですがCONNECT, DELETE, INSERT, SELECT,UPDATE明示的なアクセス許可のみが接続をリストします(これは上記のコードがプルバックする唯一のものです)。では、プログラムで有効な権限も取得する方法はありますか?

ありがとう。

4

2 に答える 2

11

私はあなたが呼ぶことができると信じていますsys.fn_my_permissions

execute as user = 'SomeUserName' -- Set this to the user name you wish to check
select * from fn_my_permissions(null, 'DATABASE') -- Leave these arguments, don't change to MyDatabaseName
order by subentity_name, permission_name
revert

これにより、あなたが言及したSSMSオプションと同じ結果が得られました。

于 2012-10-08T20:37:17.083 に答える
4

sys.database_principalsのように見えsys.database_permissions、これについていくつかの素晴らしい情報があります。このスレッド:データベース内のすべてのユーザーのすべてのアクセス許可/アクセスを検索するSQL Serverクエリは、それについてさらに詳しく説明します。

注:DBへのC#呼び出しは許容できるソリューションであると想定しています。

于 2012-10-08T20:34:35.377 に答える