20

答えはノーだと思いますが、誰かにSQL Serverデータベースへのアクセスを許可したいと思っていますが、実際には1つのテーブルにのみアクセスできるようにしたいと考えています。

誰かが1つのデータベースにのみアクセスするように制限するのは簡単ですが、1つのテーブルに制限できるかどうかはわかりません。

私の考えは、他のテーブルと同義の別のデータベースを作成し、そのデータベースへのアクセスを制限することでしたが、誰かがより良い方法を考えられるかどうか疑問に思いました。

また、権限の競合が発生すると思うので、それが機能するとは確信していません。

4

7 に答える 7

38

はい。

exec sp_msforeachtable "DENY SELECT ON ? TO [username];"
GO

GRANT SELECT ON [schemaName].[tableName] to [username]
Go 

それは機能しますが、ロールとADグループを使用して権限を管理する方がよいでしょう。

于 2012-03-20T12:51:41.517 に答える
12

すべてのテーブルをループしてアクセスを拒否する場合の問題は、新しいテーブルを追加する場合です。

重要なことは、ユーザー'db_datareader'にデータベース全体へのアクセスを許可しないことです。UIを使用すると、ログインの下の[ユーザーマッピング]タブを使用でき、「パブリック」アクセスのみを持つユーザーを作成できます。次に、データベースに移動して、そのユーザーに特定のテーブルへのSELECTアクセスを許可します([セキュリティ保護]タブの下の奇妙な名前の[検索]ボタンをクリックします)。

もちろん、このアプローチはスクリプトでも機能します。

于 2013-04-16T02:07:55.203 に答える
3
GRANT SELECT ON [SchemaName].[TableName] to [UserName]
于 2012-03-20T12:51:23.467 に答える
2

そうです。 必要な権限を付与します。

ユーザーにデータベースへのアクセスを許可するときは、ユーザーに割り当てられているロールと、それらのロールが持つ権限を確認してください。

問題は、一般的に、最初は広すぎる許可を与えることです。

于 2012-03-20T12:52:58.567 に答える
0

できますよ。ユーザーを作成してデータベースへのアクセスを許可した後、そのテーブルへの選択アクセス(または必要なレベル)のみを許可します。

于 2012-03-20T12:52:34.560 に答える
0

それは可能で非常に簡単です。次のコードは私のSQL2019で動作します:

USE [master]
GO
-- Create test login deny rights on server layer
IF NOT EXISTS (SELECT NULL FROM sys.server_principals WHERE [name] = 'UserRightTest')
  CREATE LOGIN [UserRightTest] WITH PASSWORD=N'abc1234$', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
GO
--DENY VIEW ANY DATABASE TO [UserRightTest]; -- optional, depends on how the login access the table
DENY VIEW SERVER STATE TO [UserRightTest];
GO

-- Grant only permissions to two tables
USE [MyTestDb]
GO
IF NOT EXISTS (SELECT NULL FROM sys.database_principals WHERE [type] = 'S' AND [name] = N'UserRightTest')
  CREATE USER [UserRightTest] FOR LOGIN [UserRightTest] WITH DEFAULT_SCHEMA = [dbo];
GO
GRANT SELECT ON OBJECT::[dbo].[TestParentTable] TO [UserRightTest];
GRANT SELECT,INSERT,UPDATE,DELETE ON OBJECT::[dbo].[TestChildTable] TO [UserRightTest];
GO
于 2022-01-21T06:01:11.907 に答える
-1

より良いアプローチは、別schemaのを作成し、その中にを作成するprocことschemaです。次に、ユーザーにEXECそのことを許可しますproc。それでおしまい。viewあなたはその中にを作成することができ、schemaそれはあなたが求めているものの多くかもしれません。

于 2014-10-13T18:26:15.337 に答える