如何确定程序可以使用并且仍然起作用的最严格的SQL服务器安全权限?

时间:2011-09-06 14:26:31

标签: sql-server security permissions

问题背景

对不起,如果读起来有点乏味,请耐心等待。

我的任务是确定最严格的安全权限......或者更确切地说,是否可以为我们程序使用的SQL Server登录配置更严格的安全设置,但仍然可以正常运行。

目前,该程序作为Windows服务运行,配置为使用已在SQL Server中配置为受信任的身份验证的Windows用户帐户登录。已使用的登录名已分配 db_owner 角色,该服务可以正常工作。

因此,为了缩小此用户的权限,我删除了 db_owner 权限并将其分配给 db_datareader db_datawriter 角色。不幸的是,这会导致问题,当我启动服务时,我会收到错误对话框,显示:

错误1053:服务未及时响应启动或控制请求。

并在系统事件下的事件查看器中记录:

  • 事件7009(超时等待连接)
  • 事件7000(服务未响应启动或控制)

我的问题是代码库非常大而且我不确定究竟要查找哪些需要db_owner权限(它可能设置权限?)。


问题

在执行SQL的程序中,我应该查找哪些内容会导致它需要db_owner权限?

如果第一个问题太笼统:是否有一个简单的方法/任何工具我可以用来弄清楚Windows服务在启动期间尝试做什么'SQL明智'如果我记录了系统错误事件:

  • 事件7009(超时(30000毫秒)等待...服务连接)
  • event 7000(该服务未及时响应启动或控制请求)。

BTW我尝试运行探查器并选择了所有审核事件,但在启动服务时仍然没有记录任何内容。

1 个答案:

答案 0 :(得分:0)

这是一个如此广泛的问题,但不知道您的服务架构以及它与SQL Server的通信方式。你在使用内联SQL吗?存储过程?

我认为你最好通过从服务代码开始并从一开始就跟踪执行路径来查看这个问题,然后看看SQL Server上执行什么操作。

或者,如果您正在使用存储过程,则可能需要将它们全部编写到文件中,并搜索一些仅限于db_owner的常见T-SQL命令,例如CREATE,DROP,ALTER。