在Sql Server 2000中保证用户安装

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

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

对我来说,这似乎是一个非常简单的设置,它应该是一个标准的计划。 通过一些 文章的运行表明,这不是,授予sproc执行权限并不容易。

有一个更简单的方法来授予sproc执行权限吗? 是否有一个可以提供安全数据库访问的scheme? 我正在跟踪正确的道路?

SQL Server 2000中没有存储过程执行权限的内置数据库angular色。但是,您引用的第一篇文章实际上包含了完全解决问题所需的一切。 但是,我将尝试在一步一步的过程中更清楚地阐明它(您只需要遵循一次创buildangular色,然后只在创build新的时候重新运行最后一步程序)。 在这个过程中,我将使用名称为my_database的数据库来configuration您想要以这种方式configuration的数据库:

  1. 创build存储过程sp_grantexecute (从第一篇文章链接):

     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. 创build一个名为db_executor的自定义angular色(对于要configuration此angular色的每个数据库重复此步骤)

     USE my_database GO EXEC sp_add_role 'db_executor' 
  3. 将所有现有过程的执行权限授予新angular色(每次创build新过程时只运行此步骤),使用之前添加的sp_grantexecute过程:

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

现在,除了两个其他angular色( db_datareaderdb_datawriter )之外,您还可以简单地将新angular色( db_executor )分配给应具有您正在查找的访问权限的用户。

除了Jessica的回答之外,你显然可以设置一个SQL代理作业来每分钟运行一次sp_grantexec或者类似的东西。 如果您使用的是SQL Server 2005,那么在创build存储过程/函数时,我已经成功使用了数据库级架构触发器来授予对db_executor的EXEC权限。

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

http://vyaskn.tripod.com/sql_server_security_best_practices.htm是lockingSQL 2000实例的好资源。 记得总是先在非生产机器上进行testing。

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