2012-06-18 183 views
10

我的应用程序(C#,ASP.Net)需要插入,更新和删除数据库中的数据,并运行存储过程。我需要阻止它修改数据库模式 - 不改变表,创建或删除,不更改存储过程。如何允许SQL Server用户插入/更新/删除数据,但不允许更改模式?

我需要授予应用程序用户什么权限组合?只是'选择'不会起作用,因为它需要在表格中插入/更新/删除数据。

如何检查特定登录的权限和访问权限? 如何授予或拒绝登录权限和访问权限? 我需要为新用户(登录)授予权限才能访问一个数据库。

使用SQL Server 2008 R2和SSMS。

回答

18

如果你真的想在对象级别来控制这一点,你可以这样做:

GRANT SELECT,UPDATE,INSERT,DELETE ON dbo.table TO user; 

在模式级别:

GRANT SELECT,UPDATE,INSERT,DELETE ON SCHEMA::dbo TO user; 

理想的情况是,你不会允许特设DML针对您的表格,并通过存储过程控制所有DML。在这种情况下,你只需要授予的程序本身EXEC,而不是对象倒是:

GRANT EXEC ON dbo.procedure TO user; 

同样的,如果你想允许在特定模式下的所有程序EXEC,你可以说:

GRANT EXEC ON SCHEMA::dbo TO user; 

一个例外是当你的存储过程组成动态SQL时。在这些情况下,您可能仍需要在动态SQL执行的上下文中对基础表应用权限,或者您可以使用EXECUTE AS OWNER

+0

将授予'更新'和'删除'权限允许该用户更改和删除表?另外,我可以授予模式权限,而不是每个表? – jprusakova

+1

不,更新和删除是指表中的数据,而不是数据本身。你总是可以试试这个。是的,我发布了一个可以影响架构而不是每个对象的示例(如果您稍后添加表,那么权限会被继承,除非您想添加用户*无法访问的表,那么你需要在该表上明确拒绝)。 –

+0

谢谢,这有帮助! – jprusakova