隐藏表结构

Fon*_*ier 3 sql-server permissions sql-server-2008-r2

有没有办法限制用户查看表结构?我只希望他们仅对该表具有 SELECT、INSERT、UPDATE、DELETE 访问权限。我想在以下方面限制特定的程序员: 1. 不允许他查看任何表定义 2. 不允许他创建存储过程 3. 因为已经有存储过程 (SP) 用于保存、更新、选择和删除记录,该程序员将仅使用此 SP 来访问/操作记录。总体而言,出于安全原因,我们不希望该程序员对数据库进行任何设计。

Mar*_*ith 6

这似乎是一个奇怪的请求,但它是可能的。

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对该过程的权限,并且通过所有权链接仍然可以成功访问该过程中的表。


Md *_*han 5

是的,你可以用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)

并通过管理工作室仅向特定用户提供选择、插入、更新和删除权限

  1. 右键单击 Management Studio 中的数据库。
  2. 选择属性
  3. 选择权限

  4. 如果您的用户没有出现在列表中,请选择搜索并输入他们的姓名

  5. 在用户或角色列表中选择用户 在下方窗口框架中,选中授予列下的 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这里隐藏表

注意:- 不要直接在生产服务器中运行脚本。无需在测试服务器中进行测试。