2

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_datareaderdb_owner

では、SQL がこのユーザーをdb_ownerレベルの権限で作成し、ユーザーがデータを変更できるようにするのはなぜでしょうか?

2013/08/07 更新

これは、特定の 1 つのデータベースだけで発生しているようです。まったく新しいデータベースを作成し、一連のテーブルを作成してから、上記の同じスクリプトを実行しましたが、完全に正常に動作しています。しかし、この変更が必要な実際のデータベースで試してみると、そのようには機能しません。ユーザーを作成し、許可を与えすぎました。

そのデータベースで確認できることはありますか? 特定のデータベースは私が設計したものではないことに注意してください。これは、サード パーティ ベンダーからのものです。したがって、彼らがどのような変更を行ったのか正確にはわかりません。

どんな助けでも大歓迎です。

4

4 に答える 4

0

グレッグのコメントを拡張すると、これはおそらく、復元されたデータベースが現在の (宛先) サーバーに存在しないログインによってソースサーバーで所有されていた場合に発生します。[全般] タブの情報は元の所有者 (ソース サーバー上) であり、[ファイル] タブには反映されません。現在のサーバーにはそのログオンが存在しないためです。ある意味では、これは「孤立したデータベース」です。

于 2018-11-20T12:50:42.530 に答える