1

ユーザー ログインごとにデータベース ビューを制限したい状況があります。

例: SQL Server インスタンスに、MyDB、UserDB、RestrictedDB という 3 つのデータベースがあります。次に、2 つのログインを作成します。ユーザー 1 とユーザー 2。次に、[User1] に対して DENY VIEW ANY DATABASE を実行し、[User2] に対して DENY VIEW ANY DATABASE を実行しました。次に、sp_changedbowner 'User1' を実行して、User1 を UserDB の所有者にしました。

User1 としてログインすると、まさに必要な UserDB しか表示されません。しかしもちろん、User2 としてログインすると、彼が表示できるデータベースはありません。

sp_addrolemember 'db_owner','User2' を実行して User2 を db_owner として作成し、再度ログインしましたが、まだ UserDB が表示されません。User2 で sp_changedbowner を実行しようとはしませんでした。その結果、User2 は UserDB を表示できますが、User1 は表示できないと思います。

私が必要とするのは、User1 と User2 の両方が UserDB だけを表示できるようにすることです。どうすればこれを行うことができますか?

前もって感謝します!

4

4 に答える 4

3

テーブル、ビュー、およびそれらすべてへのアクセスに対する権限を付与するセキュリティ ロールを設定できます。目的のユーザーを作成したロールに関連付けると、目的の結果が得られます。

以下は、ロール、ログイン、ユーザーを作成し、問題のビューに SELECT のみのアクセス許可を提供する必要があります。必要なアクセス許可に同じ方法を適用できます。

CREATE ROLE [db_views_role] AUTHORIZATION [dbo]
GO
GRANT SELECT ON [dbo].[vMyView] TO [db_views_role]
GO
CREATE LOGIN [my_login] WITH PASSWORD=N'PASSWORD', DEFAULT_DATABASE=[MyDatabase], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
CREATE USER [my_login] FOR LOGIN [my_login]
GO
EXEC sp_addrolemember N'db_views_role', N'my_login'
GO
于 2010-02-05T16:16:10.327 に答える
1

ログインにマッピングするデータベース ユーザーを作成して、ログインをデータベースに関連付ける必要があります。

于 2010-02-05T16:06:43.153 に答える
0

Oracle では、これは「GRANT」コマンドを介して行われます。SQL Server に GRANT があるかどうかはわかりません

GRANT が使用されます。

GRANT [permissions] ON TABLE to [user]

それで

GRANT select, insert, update, delete ON TABLE to User2
于 2010-02-05T16:05:16.827 に答える
0

SQL Server には、サーバー ログインデータベース ユーザーがあります。次の方法で、サーバー ログインを特定のデータベースに関連付けてみます。

データベース > セキュリティ > ユーザー > 新しいユーザー...

于 2010-02-05T16:14:54.633 に答える