gt6*_*89b 11 sql-server-2008 sql-server permissions sql-server-2012
我想在我的 SQL Server 2012 实例上设置一个“阅读”用户。我想让他有权执行任何存储过程、函数或直接 SQL 语句,这些语句从所有表和视图中检索数据,但不能更新或插入(即读取任何内容,不写入任何内容)。
我是否可以在不按名称专门授予每个函数或存储过程的权限的情况下进行设置,而是授予他对任何函数或存储过程的执行权,而只是剥夺修改表的权利?
如果我改为运行 SQL Server 2008,会有什么变化吗?
澄清和补充:
Pau*_*ite 15
这并不像你想象的那么容易实现。一种方法是创建一个新的用户定义的数据库角色,授予该角色所需的所有权限,然后将用户添加到新角色。这至少使将来更容易为用户(或其他用户定义的角色)授予这组权限。以下步骤是一个好的开始:
-- The user-defined role containing all required permissions
CREATE ROLE Readers AUTHORIZATION dbo;
-- Give read-only access to all tables,
-- views on those tables, and in-line
-- functions
ALTER ROLE db_datareader ADD MEMBER Readers;
-- Example: add a user (Bob) to the role
ALTER ROLE Readers ADD MEMBER Bob;
Run Code Online (Sandbox Code Playgroud)
在此之后,Bob 将在数据库中拥有广泛的只读权限。他将能够读取所有表、这些表的视图和内嵌函数。但是,他将无法执行任何过程或使用非内联函数。
您需要为读者角色授予特定权限,以使用您希望读者访问的安全功能和程序。您可能可以采取一些步骤来简化此过程(例如将对象分组到模式中并授予对模式而不是单个对象的执行权限),但是这里有太多细节需要介绍。
需要注意的一件事是,如果正在修改的过程和对象共享一个公共所有者,则缺乏数据修改权限不会阻止 Reader 通过已被授予执行权限的存储过程更改数据。在这种情况下,也不会尊重明确的否认。此功能称为所有权链接。
归档时间: |
|
查看次数: |
14706 次 |
最近记录: |