AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 58013
In Process
Gavin Miller
Gavin Miller
Asked: 2009-08-25 07:59:28 +0800 CST2009-08-25 07:59:28 +0800 CST 2009-08-25 07:59:28 +0800 CST

Sql Server 2000 中的安全用户设置

  • 772

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

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

对我来说,这似乎是一个非常简单的设置,它应该是一个标准方案。浏览几篇 文章表明事实并非如此,并且授予 sproc 执行权限并不容易。

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

sql-server
  • 2 2 个回答
  • 678 Views

2 个回答

  • Voted
  1. Jessica McKinnon
    2009-08-25T09:18:15+08:002009-08-25T09:18:15+08:00

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

    1. 创建存储过程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. 创建一个名为 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应该具有您正在寻找的访问权限的用户。

    • 1
  2. luna
    2010-01-06T17:12:30+08:002010-01-06T17:12:30+08:00

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

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

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

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

    • 1

相关问题

  • sql server 连接字符串上的网络数据包大小以提高吞吐量

  • 基于 Microsoft 的服务器(IIS、MSSQL 等)上的病毒扫描应排除哪些内容?

  • SQL 洗衣清单

  • OPENROWSET、二进制文件、varchars 和 varbinaries

  • 聚集索引与非聚集索引?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve