拒绝所有系统存储过程的 SQL 权限

拒绝所有系统存储过程的 SQL 权限

跟进我的原创StackOverFlow 问题,我们尝试创建一个 SQL 用户(在许多 2000、2005 和 2008 服务器上),并赋予其最低权限来执行简单的“心跳检查”,以确保实例仍然处于活动状态。我们决定使用脚本执行简单的“SELECT @@VERSION”。

不过,我们想以“最低允许权限”的名义阻止该用户执行(几乎)任何其他操作。不幸的是,即使没有添加任何显式权限,PUBLIC 角色(所有用户都是其成员)也可以执行相当多的操作。具体来说:

从 SYSDATABASES 中选择 *
好的,我可以将用户明确添加到 MASTER 数据库中的 db_denydatareader 角色,以防止读取任何系统表

SP_WHO
好的,我可以明确拒绝 SP_WHO 上的所有操作,但 SP_WHO2 和所有其他系统存储过程怎么办?我必须明确拒绝吗?全部这些?

因此,由于无法从 PUBLIC 角色中删除用户,除了明确拒绝每个用户之外,还有其他方法可以阻止系统存储过程的运行吗?

系统存储过程真的值得担心吗?除了 sp_who 之外,还有什么我真的不希望该用户看到吗?

答案1

在 SQL 2005 及更高版本中,虽然用户可以查询系统对象,但他们只能看到他们有权访问的信息。对于 sys.databases,您只能看到您有权访问的数据库。当您运行 sp_who 时,您只能看到有关您的会话的信息。

答案2

你没事。只是不要授予你的“心跳”帐户访问任何数据库的权限。

想想看,您正在运行的 SELECT @@VERSION 命令是这些存储过程的一部分,因此您需要构建所有其他内置函数的完整列表,并专门阻止对它们的访问。没有对您的数据库服务器的写入权限和对您的数据库的读取权限的用户将无法造成任何破坏。

答案3

为了锁定您想要的级别(我回答了您的另一个问题),您最终会破坏一些东西。

我实在不同意你的意图。

我也会将心跳与健康监测结合起来。例如寻找块、记录 CPU、使用 dmv 等

我也希望您能同样关注您的网络、服务器、PC等其他部分。

例如,仅 SQL Server,您是否使用服务器端 SQL Server 协议加密?仅使用 tcp?使用组策略限制谁可以访问服务器?SQL 登录是否遵循域密码策略?SQL 服务帐户是否已锁定?

相关内容