SQL Server 2008 R2 で新しい SQL ユーザーを作成する際に問題が発生しています。SQL Server Management Studio を使用するとdb_owner
、デフォルトでロール メンバーシップがチェックされます。読み取り専用アクセス権を持つ新しい sql ユーザーを作成したいだけです。次の生の SQL を使用しても、db_owner レベルの権限を持つユーザーが作成されます。
<!-- language: lang-sql -->
CREATE LOGIN readonlyuser
WITH PASSWORD = '12345',CHECK_POLICY = OFF, DEFAULT_DATABASE=mydatabase
GO
USE mydatabase
GO
CREATE USER readonlyuser FOR LOGIN readonlyuser
GO
EXEC sp_addrolemember 'db_datareader', 'readonlyuser'
新しく作成したユーザーで SQL Server Management Studio にログオンすると、基本的に任意のテーブルにアクセスし、任意の方法で任意のデータを変更できます。これはまさに私がやりたくないことです。データを読み取るだけで、データを変更したくない
奇妙なことは、データベースの役割を見ると、内部ではなくreadonlyuser
内部にあります。db_datareader
db_owner
では、SQL がこのユーザーをdb_owner
レベルの権限で作成し、ユーザーがデータを変更できるようにするのはなぜでしょうか?
2013/08/07 更新
これは、特定の 1 つのデータベースだけで発生しているようです。まったく新しいデータベースを作成し、一連のテーブルを作成してから、上記の同じスクリプトを実行しましたが、完全に正常に動作しています。しかし、この変更が必要な実際のデータベースで試してみると、そのようには機能しません。ユーザーを作成し、許可を与えすぎました。
そのデータベースで確認できることはありますか? 特定のデータベースは私が設計したものではないことに注意してください。これは、サード パーティ ベンダーからのものです。したがって、彼らがどのような変更を行ったのか正確にはわかりません。
どんな助けでも大歓迎です。