Sql Server 2000 中的安全用户设置

Sql Server 2000 中的安全用户设置

我正在寻找以最安全的方式在 Sql Server 2000 中设置用户帐户。标准如下:

  • 无法访问主数据库(db_denydatareaderdb_denydatawriter在主数据库上)
  • 数据库读取权限 ( db_datareader)
  • 数据库写入权限 ( db_datawriter)
  • sprocs 的 DB 执行权限 ( ???)

对我来说,这似乎是一个非常直接的设置,它应该是一个标准方案。通过夫妻 文章表明事实并非如此,并且授予 sproc 执行权限并不容易。

有没有更简单的方法来授予 sproc 执行权限?是否有提供安全数据库访问的万能方案?我是否走在正确的道路上?

答案1

SQL Server 2000 中没有用于存储过程执行权限的内置数据库角色。但是,您引用的第一篇文章实际上包含了完全解决问题所需的一切。但是,我将尝试通过分步过程更清楚地说明这一点(您只需遵循一次即可创建角色,然后每次创建新过程时只需重​​新运行最后一步)。在此过程中,我将使用名称 my_database 来表示您想要以这种方式配置的数据库:

  1. 创建存储过程授予执行权限(链接自第一篇文章):

    use master
    go
    create procedure sp_grantexec(@user sysname,@pattern sysname = NULL,@debug int = 0)
    as
    set nocount on
    declare @ret int
    declare @sql nvarchar(4000)
    declare @db  sysname ; set @db = DB_NAME()
    declare @u   sysname ; set @u = QUOTENAME(@user)
    
    set @sql ='select ''grant exec on '' + QUOTENAME(ROUTINE_SCHEMA) + ''.'' +
              QUOTENAME(ROUTINE_NAME) + '' TO ' + @u + ''' FROM INFORMATION_SCHEMA.ROUTINES ' + 
              'WHERE OBJECTPROPERTY(OBJECT_ID(ROUTINE_NAME),''IsMSShipped'') = 0'
    
    if @pattern is not null
    set @sql = @sql + N' AND ROUTINE_NAME LIKE ''' + @pattern + ''''
    
    if @debug = 1 print @sql
    else
    exec @ret = master.dbo.xp_execresultset @sql,@db
    
    If @ret <> 0
    begin
       raiserror('Error executing command %s',16,1,@sql)
       return -1
    end
    
  2. 创建一个名为 db_executor 的自定义角色(对要配置此角色的每个数据库重复此步骤)

    USE my_database
    GO
    EXEC sp_add_role 'db_executor'
    
  3. 授予所有人执行权限现存的使用先前添加的 sp_grantexecute 过程将过程添加到新角色(每次创建新过程时只需运行此步骤):

    USE my_database
    GO
    EXEC master.dbo.sp_grantexecute 'db_executor'
    

db_executor现在,除了另外两个角色(db_datareader和)之外,您还可以简单地将新角色()分配db_datawriter给应该具有您所需访问权限的用户。

答案2

除了杰西卡的回答之外,您显然可以设置 SQL Agent 作业以每分钟运行 sp_grantexec 或类似操作。如果您使用的是 SQL Server 2005,我已成功使用数据库级架构触发器在创建存储过程/函数时向 db_executor 授予 EXEC 权限。

如果没有其他要求,通常您不需要担心主读/写,而是在 2000 上执行某些扩展存储过程(大多数系统表/视图受运行查询的用户角色限制(授予的登录没有关联用户)。

http://vyaskn.tripod.com/sql_server_security_best_practices.htm是锁定 SQL 2000 实例的良好资源。请记住始终先在非生产机器上进行测试。

MBSA 有时也可以指出 SQL 中的基本问题。

相关内容