如何在SQL Server数据库中隐藏表格

3
我在Azure中创建了一个数据同步过程,因此Azure在我的SQL Server数据库中创建了一些位于模式下的表。我想隐藏那些位于模式下的表。
请问你们能否建议如何避免在Azure中显示这些表,或如何从我的SQL Server中隐藏这些表?

enter image description here

enter image description here


我的意思是对于某些用户来说是不可见的。 - Nimesh Gami
2
你做不到。你可以使用DENY拒绝他们对这些对象进行任何操作,例如SELECTALTER甚至查看定义,或确保你不给予他们在DataSync模式下的任何权限,但你无法阻止数据库中的用户能够看到其中的对象。 - Thom A
@sepupic OE?我猜这里是指Oracle Enterprise?那和Azure上的SQL Server有什么关系呢?Oracle和SQL Server是两个完全不同的产品。这就像说“我可以在Windows上做到这一点,但在Ubuntu上却做不到。为什么?”因为它们是不同的。它们都是操作系统(或数据库引擎),但它们并不相同。 - Thom A
1
@Larnu,OE也是SSMS对象资源管理器。元数据的可见性受权限控制,因此用户必须具有某些权限才能查看表格。 - Dan Guzman
1
@NimeshGami,请问授予了哪些权限,使得用户能够看到这些表格?除非授予权限或通过角色成员身份,否则对象是不可见的。 - Dan Guzman
显示剩余5条评论
2个回答

7
这个问题有点老了,但今天我在寻找类似的东西,以便在数据库中组织表,要么隐藏设计完成的表,要么将它们放在某个文件夹中,以便它们不会干扰我目前正在工作的表 (并使我困惑:P)

我发现了这篇文章,讨论了在SSMS对象浏览器中隐藏表

使用扩展属性,OP能够从视图中隐藏表格。你可以在文章本身中阅读更多详细信息,但为了回答这个问题,我在此重现OP的代码

隐藏表"Person.Address"

EXEC sp_addextendedproperty
@name = N'microsoft_database_tools_support',
@value = 'Hide',
@level0type = N'Schema', @level0name = 'Person',
@level1type = N'Table', @level1name = 'Address';
GO

显示表格“Person.Address”

EXEC sp_dropextendedproperty
@name = N'microsoft_database_tools_support',
@level0type = N'Schema', @level0name = 'Person',
@level1type = N'Table', @level1name = 'Address';
GO

我刚刚在我的一个表dbo.Users.Logins上使用了这个,我使用了@level0name='dbo'。

@level1name='Users.Logins'

执行完命令后,我刷新了表格列表,刷新大约花了45秒(不确定这是否正常),但是刷新后指定的表名不在表格列表中
移除扩展属性后,表名再次出现
即使隐藏,表格仍能正常工作(SELECT、INSERT、UPDATE、DELETEJOINS)。
我正在使用SQL Server Management Studio v18.4(© 2019)。
希望对你有所帮助。


6

在 SQL Server 中没有“隐藏”功能,相反,您可以拒绝某些用户或用户组对特定表或对象的访问权限,以防止他们查看模式下的表或对象。

您可以使用 DENY 关键字来拒绝某些用户,使用 REVOKE 来删除现有的权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接