是否有一种限制用户查看表结构的方法?我只想让他们有一个SELECT,INSERT,UPDATE,DELETE访问,只有在那个表上。我想将一个特定的程序员限制在以下几个方面: 1.不允许他查看任何表定义2,不允许他创建存储过程3。由于已经有用于保存、更新、选择和删除记录的存储过程( SPs ),该程序员将只使用此SPs访问/操作记录。总的来说,出于安全考虑,我们不希望那个程序员对数据库进行任何设计。
发布于 2017-03-02 08:19:19
这似乎是一个奇怪的要求,但这是可能的。
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;当然,他们将能够通过发出一个SELECT *来查看列的名称,并且能够通过select into获得更多的数据类型--一个新的(可能是#temp)表。他们会失去那张桌子上的智能感知。
你还说
由于已经有用于保存、更新、选择和删除记录的存储过程( SPs ),该程序员将只使用此SPs访问/操作记录。
在这种情况下,它们可能根本不需要表上的任何权限。如果表和存储过程具有相同的所有者,则只需对过程授予exec权限,则对过程中表的访问仍将通过所有权链接获得成功。
发布于 2017-03-02 08:28:09
是的,你可以躲在sp_addextendedproperty车管所。
假设您有一个数据库mycompany模式用户,其中有一个包含电话号码、地址和更多详细信息表emp_details的重要信息的表。在sp_extendedproperty的帮助下,您可以在management中隐藏表以避免查看。
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向特定用户提供选择、插入、更新和删除权限
如果您希望只对数据库上的外部客户端授予视图访问权限而不是表访问权限,则为
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.关于进一步参考如何在sql server管理中隐藏表和这里
注意:-不要在生产服务器中直接运行脚本。没有在测试服务器中进行测试。
发布于 2017-09-03 10:29:00
DbDefence可以隐藏数据库模式,完全关闭数据库,甚至对于DBA也是如此。它对Server 2005和2008是免费的。对于小型数据库,其他Server也是免费的。
免责声明:我与供应商有关联。
https://dba.stackexchange.com/questions/165929
复制相似问题