我正在寻找禁用SQL Server 中用户/组访问sys.tables
/的最佳方法Information Schema
。
它显示了一种如何拒绝访问的方法,[sys].[something]
如下所示:
DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole
GO
Run Code Online (Sandbox Code Playgroud)
但是没有办法如何禁用对以下内容的访问Information Schema
:
DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用。
如何禁用对 information_schema 的访问?
是否有更简单的方法禁用对所有sys
/ 的访问information_schema
?
更新: 实际上我不能同时运行以下语句:
DENY SELECT ON [sys] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA To reducedDBO …
Run Code Online (Sandbox Code Playgroud) sql-server-2005 sql-server-2008 sql-server sql-server-2008-r2 information-schema
为了非常灵活并更轻松地将数据库移动到不同的服务器,我们提出了为每个数据库使用别名的想法。因此,通过简单地更改 DNS 条目,我们可以将所有查询路由到不同的数据库服务器,而无需更改连接字符串或重新部署相应的客户端应用程序。
澄清:
每个数据库我们都会有一个别名。因此,如果将数据库移动到不同的服务器,只需更改其 DNS 别名。
例如:
因此,假设 db1 已从 server1 移至 server2,则无需更改连接字符串。只需要更改 DNS 别名条目,转发到 server2 而不是 server1。
这有什么已知的缺点吗?