[解決済み] データベースの全ユーザーのリストを取得する方法
質問
MS SQL Server の特定のデータベースにアクセスできる Windows ユーザーと 'sa' を含むすべてのユーザーのリストを取得するつもりです。
基本的に、私はリストが以下に示すように見えることを望みます。
SQL Server Management Studio
で表示されるようなリスト (すなわち
[databse] -> Security -> Users
を展開したときに表示されるリスト)ですが、ひとつだけ重要な例外があります。私は
'dbo'
を見たくないのです。むしろ、データベースを所有している実際のユーザーを見たいのです。ですから、たとえば、'sa' が
'dbo'
,
'sa'
の代わりにリストに含まれる必要があります。
'dbo'
. もうひとつ見逃してはならないのは、リスト内の
SQL Server Management Studio
のリストには、通常、SQL ユーザーの他に Windows ユーザーも表示されますが、これらのユーザーも含めて表示してほしいです。
今のところ、次のようなクエリを思いつくことができました。
SELECT * FROM sys.database_principals where (type='S' or type = 'U')
このクエリはほぼ正しいのですが、問題はこのクエリが
'dbo'
の条件を満たしていないことです。
このクエリをどのように変更すればよいでしょうか、それとも別のクエリを使用すべきでしょうか。
どのように解決するのですか?
GUI (SSMS) で何かを「見た」ときに、「これは私が必要としているものだ」と思ったときはいつでも、Sql Profiler を実行して、使用されたクエリを検索することができます。
Sql Profiler を実行します。 もちろん、データベースにアタッチしてください。
そして、GUI(SSMS内)で右クリックし、"Refresh"をクリックしてください。
そして、Profiler "catch"を見てきてください。
MyDatabase / Security / Users で、"Users" をクリックすると、以下のように表示されました。
繰り返しますが、WHERE 句と LEFT OUTER JOIN は私が考えたのではなく、SSMS クエリの一部でした。 このクエリは、Microsoft の誰かが書いたものであり (製品を熟知している、別名エキスパート)、データベース内のすべての奇妙なフラグに精通しているのです。
しかし、SSMS/GUI -> Sql Profiler のトリックは、多くのシナリオで機能します。
SELECT
u.name AS [Name],
'Server[@Name=' + quotename(CAST(
serverproperty(N'Servername')
AS sysname),'''') + ']' + '/Database[@Name=' + quotename(db_name(),'''') + ']' + '/User[@Name=' + quotename(u.name,'''') + ']' AS [Urn],
u.create_date AS [CreateDate],
u.principal_id AS [ID],
CAST(CASE dp.state WHEN N'G' THEN 1 WHEN 'W' THEN 1 ELSE 0 END AS bit) AS [HasDBAccess]
FROM
sys.database_principals AS u
LEFT OUTER JOIN sys.database_permissions AS dp ON dp.grantee_principal_id = u.principal_id and dp.type = 'CO'
WHERE
(u.type in ('U', 'S', 'G', 'C', 'K' ,'E', 'X'))
ORDER BY
[Name] ASC
関連
-
[解決済み】各GROUP BY式は、外部参照でない列を少なくとも1つ含む必要があります。
-
[解決済み] 式をデータ型datetimeに変換する際に算術オーバーフローエラーが発生する。(日付と時刻の表示中に...)
-
[解決済み] 各GROUP BY式は、外部参照でない列を少なくとも1つ含む必要があります。
-
[解決済み] NVARCHAR(MAX)の最大文字数を教えてください。[重複しています]。
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] データベース内の全テーブルのサイズを取得する
-
[解決済み] TSQLを使用してデータベース内のすべてのテーブルのリストを取得するにはどうすればよいですか?
-
[解決済み] SQL Serverで、指定したテーブルを参照しているすべての外部キーを一覧表示するにはどうすればよいですか?
-
[解決済み】データベースから接続文字列を取得する方法
-
[解決済み】SQL Serverデータベースのすべてのテーブルを削除する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】SQL Server データベース復元エラー:指定されたキャストは有効ではありません。(SqlManagerUI)
-
[解決済み] SSRS レポートの定義が無効です。
-
[解決済み] パーセント値を保持するための適切なデータ型?
-
[解決済み] 階層テーブルの設計
-
[解決済み] SSISで新しいレコードを挿入する前に、宛先テーブルを空にするにはどうすればよいですか?
-
[解決済み] データ損失の可能性があるため、スキーマの更新を終了します。
-
[解決済み] Sqlサーバーに制約が存在するかどうかを確認する方法は?
-
[解決済み] SQL Server : ログインに成功しましたが、「データベース [dbName] にアクセスできません。(ObjectExplorer) "と表示されました。
-
[解決済み] クエリでカラムを落とさずにデータ型を変更するには?
-
[解決済み] SQL Serverは、ビュークエリでLEFT JOINをLEFT OUTER JOINに置き換えます。