Fon*_*ier 3 sql-server permissions sql-server-2008-r2
有没有办法限制用户查看表结构?我只希望他们仅对该表具有 SELECT、INSERT、UPDATE、DELETE 访问权限。我想在以下方面限制特定的程序员: 1. 不允许他查看任何表定义 2. 不允许他创建存储过程 3. 因为已经有存储过程 (SP) 用于保存、更新、选择和删除记录,该程序员将仅使用此 SP 来访问/操作记录。总体而言,出于安全原因,我们不希望该程序员对数据库进行任何设计。
这似乎是一个奇怪的请求,但它是可能的。
GRANT SELECT ON YourTable TO FOO;
GRANT INSERT ON YourTable TO FOO;
GRANT UPDATE ON YourTable TO FOO;
GRANT DELETE ON YourTable TO FOO;
DENY VIEW DEFINITION ON YourTable TO FOO;
Run Code Online (Sandbox Code Playgroud)
他们当然能够通过发出 a 来查看列的名称,SELECT *并且能够通过select into新的(可能的#temp)表更费力地获取数据类型。他们将失去那张桌子上的智能感知。
你还说
由于已经有用于保存、更新、选择和删除记录的存储过程 (SP),该程序员将只使用这些 SP 来访问/操作记录。
在这种情况下,他们可能根本不需要桌子上的任何权限。如果表和存储过程具有相同的所有者,您只需要授予exec对该过程的权限,并且通过所有权链接仍然可以成功访问该过程中的表。
是的,你可以用sp_addextendedpropertyDMV隐藏。
假设您有一个数据库 mycompany 模式用户,其中有一个包含重要信息的表,其中包含电话号码、地址和更多详细信息表 emp_details。您可以在 sp_extendedproperty 的帮助下隐藏在管理工作室中查看的表。
用法:
EXEC sp_addextendedproperty
@name = N'microsoft_database_tools_support',
@value = '<Hide? , sysname, 1>',
@level0type ='schema',
@level0name ='users', --give the schema name here. if it is dbo give 'dbo'
@level1type = 'table',
@level1name = 'emp_details' --give the table name which you want to hide.
Go
Run Code Online (Sandbox Code Playgroud)
并通过管理工作室仅向特定用户提供选择、插入、更新和删除权限
- 右键单击 Management Studio 中的数据库。
- 选择属性
选择权限
如果您的用户没有出现在列表中,请选择搜索并输入他们的姓名
- 在用户或角色列表中选择用户 在下方窗口框架中,选中授予列下的 SELECT、INSERT、UPDATE、DELETE 权限
如果您只想为数据库上的外部客户端提供 VIEW 访问权限而不是表访问权限。这样做
DENY SELECT ON table TO user; // To Deny on the particular table to user
GRANT SELECT ON view TO user; // To give view permission to particular user.
Run Code Online (Sandbox Code Playgroud)
进一步参考如何在 sql server management studio和这里隐藏表
注意:- 不要直接在生产服务器中运行脚本。无需在测试服务器中进行测试。
| 归档时间: |
|
| 查看次数: |
2596 次 |
| 最近记录: |