如何设置数据用户的拒绝权限

How to set DENY permissions on a data user

对于 .net 应用程序,我们可以像这样存储数据库连接字符串

<connectionstrings config="cnn.config" />

我试图获得尽可能少的权限,但似乎总是有不同的方式。获取信息。

我正在使用这些设置,因为它们对一两个人来说更安全我有其他人在处理我的应用程序。

所以我设置了

USE database_name;
GRANT EXECUTE TO [security_account];

这样用户就可以执行命令了。

然后我有 db_readerdb_writer 这样他们就可以读写,这看起来是完美的结合。

仍然是个坏消息,用户可以登录并查看表和存储过程定义但不能更改它们,但是,他们仍然可以看到它们。

如何设置用户可以读、写的权限。执行,就这样了!?

如果您想阻止用户查看 sp 定义,您需要在 sp.

中指定 WITH ENCRYPTION 选项

将用户添加到 db_datareaderdb_datawriter 角色并授予 EXECUTE 将限制用户读写和执行,但他们仍然可以使用 [= 查看 sp 定义16=] 存储过程和 sys.sql_modules 目录视图。有关 sp 和函数加密的更多信息,请参阅 here

exec sp_addrolemember @rolename =  'db_datareader', @membername = 'testUser'
exec sp_addrolemember @rolename =  'db_datawriter', @membername = 'testUser'
GRANT EXECUTE TO testUser;

您可以像这样在 AS 关键字之前添加一个 sp WITH ENCRYPTION 选项。请参阅 CREATE PROCEDURE 定义的 WITH ENCRYPTION 部分 here

CREATE PROCEDURE HumanResources.uspEncryptThis
WITH ENCRYPTION
AS
    SET NOCOUNT ON;
   SELECT BusinessEntityID, JobTitle, NationalIDNumber, VacationHours, SickLeaveHours 
   FROM HumanResources.Employee;
GO

您还可以通过在 returns 关键字之后添加它来更改函数。

ALTER FUNCTION dbo.getHash ( @inputString VARCHAR(20) )
RETURNS VARBINARY(8000) WITH ENCRYPTION 

能够查看表、存储过程等的定义受 VIEW DEFINITION 权限控制。所以你可以这样做:

DENY VIEW DEFINITION TO [yourUser];

并且该用户将无法看到数据库中任何对象的定义。这还包括查看其他用户的能力。