次のスクリプトを使用して、WindowsグループをSQL 2008 R2インスタンスにマップするサーバーログインとデータベースユーザーを追加しました。匿名のために名前を変更しました。
USE master
go
CREATE LOGIN [DOMAIN\AppUsers] FROM WINDOWS
WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
go
USE AppDb
go
CREATE USER [DOMAIN\AppUsers] FOR LOGIN
[DOMAIN\AppUsers]
go
EXEC sp_addrolemember N'db_owner', N'DOMAIN\AppUsers'
go
DOMAIN \ User1アカウントがアプリにログオンすると、User1はDOMAIN \ AppUsersのメンバーであるため、User1はdboスキーマのテーブルに問題なくクエリを実行しますが、このアプリではユーザーがテーブルを作成することもできます。スキーマを指定せずにこれらのテーブルを作成すると、SQL Serverは次のことを行います。
- インスタンスのSSMS \ Security \ Loginsにリストされていない 'DOMAIN \ User1'ログインを使用するAppDbに 'DOMAIN \ User1'ユーザーを作成します。
- AppDbに「DOMAIN \ User1」スキーマを作成します。
- 新しい「DOMAIN \ User1」スキーマでを使用してこれらのテーブルを作成します。
私はこれらの結果に完全に困惑しています。ここに私の質問があります:
- 追加のオブジェクトを作成するのではなく、テーブルの作成が失敗することを期待します。これを説明しているBooks Onlineの部分を誰かに教えてもらえますか?
- サーバーがスキーマを追加しようとしているのに、サーバーが 'DOMAIN \ AppUsers'スキーマを作成せず、そのスキーマに新しいテーブルを追加しないのはなぜですか?
- また、データベースはSSMS \ Security \ Loginsに表示されないログインをどのように使用しますか?
- SSMS \ Databases \ AppDb \ Security \ Usersの「DOMAIN \ User1」ユーザーを見ると、ユーザーアイコンに小さな赤い矢印が下向きになっています。どういう意味ですか?
単純化のためにSQL認証を好む組織内でWindows認証を使用し始めたばかりなので、私の違いは違いを知らないことに起因していると私は確信しています。このコードは、Windows認証の使用を検討するずっと前から作成されているため、Windows認証を使用してデータベース所有者以外のユーザーとしてログオンした場合の新しいスキーマの作成に関する理解を深める必要があります。
わからない場合は、SQL認証よりもWindows認証の使用を強く求めているのは私です。これについてしっかりと理解できなければ、SQL認証に戻ります。