谁有数据库安全管理规范的文章。

解决方案 »

  1.   

    邹老大有些
    http://blog.csdn.net/zjcxc/category/125598.aspx
      

  2.   

    我收藏了一篇:SQL Server系统表的作用&安全检查列表&SQL Server的用户及权限 (1)2009-08-27 111117  www.hackbase.com  来源:Rainy's fox
    SQL Server 中各个系统表的作用 sysaltfiles 主数据库 保存数据库的文件syscharsets 主数据库 字符集与排序顺序sysconfigures 主数据库 配置选项syscurconfigs 主数据库 当前配置选项sysdatabases 主数据库 ...
    SQL Server 中各个系统表的作用 
    sysaltfiles 主数据库 保存数据库的文件
    syscharsets 主数据库 字符集与排序顺序
    sysconfigures 主数据库 配置选项
    syscurconfigs 主数据库 当前配置选项
    sysdatabases 主数据库 服务器中的数据库
    syslanguages 主数据库 语言
    syslogins 主数据库 登陆帐号信息
    sysoledbusers 主数据库 链接服务器登陆信息
    sysprocesses 主数据库 进程
    sysremotelogins主数据库 远程登录帐号
    syscolumns 每个数据库 列
    sysconstrains 每个数据库 限制
    sysfilegroups 每个数据库 文件组
    sysfiles 每个数据库 文件
    sysforeignkeys 每个数据库 外部关键字
    sysindexs 每个数据库 索引
    sysmenbers 每个数据库 角色成员
    sysobjects 每个数据库 所有数据库对象
    syspermissions 每个数据库 权限
    systypes 每个数据库 用户定义数据类型
    sysusers 每个数据库 用户  SQL Server 安全检查列表 
    1. 确认已经安装了NT2000和SQL Server的最新补丁程序,不用说大家应该已经安装好了,但是我觉得最好还是在这里提醒一下。 2. 评估并且选择一个考虑到最大的安全性但是同时又不影响功能的网络协议。 多协议是明智的选择, 但是它有时不能在异种的环境中使用。 3. 给 sa 和 probe 帐户设定强壮的密码来加强其安全性。设定一个强壮的密码并将其保存在一个安全的地方。 注意 probe帐户被用来进行性能分析和分发传输。 当在标准的安全模态中用的时候 , 给这个帐户设定高强度的密码能影响某些功能的使用。 4. 使用一个低特权用户作为 SQL 服务器服务的查询操作账户,不要用 LocalSystem 或sa。 这个帐户应该有最小的权利 ( 注意作为一个服务运行的权利是必须的)和应该包含( 但不停止)在妥协的情况下对服务器的攻击。 注意当使用企业管理器做以上设置时 , 文件,注册表和使用者权利上的 ACLs同时被处理。 5. 确定所有的 SQL 服务器数据,而且系统文件是装置在 NTFS 分区,且appropraite ACLs 被应用。 如果万一某人得到对系统的存取操作权限,该层权限可以阻止入侵者破坏数据,避免造成一场大灾难。 6.如果不使用Xp_cmdshell就关掉。 如果使用 SQL 6.5, 至少使用Server Options中的SQLExecutieCmdExec 账户操作限制非sa用户使用XP_cmdshell. 
    在任何的 isql osql 窗口中( 或查询分析器): use master 
    exec sp_dropextendedproc'xp_cmdshell' 对 SQLExecutiveCmdExec 的详细情况请查看下列文章 
    httpsupport.microsoft.comsupportkbarticleQ159221. 如果你不需要 xp_cmdshell 那请停用它。请记住一个系统系统管理员如果需要的话总是能把它增加回来。这也好也不好 - 一个侵入者可能发现它不在,只需要把他加回来。考虑也除去在下面的 dll但是移除之前必须测试因为有些dll同时被一些程序所用。 要找到其他的程序是否使用相同的 dll 
    首先得到该 dll 。 
    select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and o.name='xp_cmdshell' 
    其次,使用相同的 dll发现其他的扩展储存操作是否使用该dll。 
    select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and c.text='xplog70.dll' 
    用户可以用同样的办法处理下面步骤中其他你想去掉的进程。 7. 如不需要就停用对象连接与嵌入自动化储存程序 ( 警告 - 当这些储存程序被停用的时候 , 一些企业管理器功能可能丢失). 这些包括 
    Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty Sp_OAMethod Sp_OASetProperty Sp_OAStop 如果你决定停用该进程那么请给他们写一个脚本这样在以后你用到他们的时候你能够把他们重新添加回来 。 记住, 我们在这里正在做的是锁定一个应用程序的功能 - 你的开发平台应该放到其他机器上。 8. 禁用你不需要的注册表存取程序。(同上面的警告)这些包括 Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues Xp_regremovemultistring 注意 我过去一直在这里列出 xp_regread xp_regwrite但是这些程序的移除影响一些主要功能包括日志和SP的安装,所以他们的移除不被推荐。 9.移除其他你认为会造成威胁的系统储存进程。 这种进程是相当多的,而且他们也会浪费一些cpu时间。 小心不要首先在一个配置好的服务器上这样做。首先在开发的机器上测试,确认这样不会影响到任何的系统功能。在下面是我们所推荐的有待你评估的一些列表 sp_sdidebug 
    xp_availablemedia 
    xp_cmdshell 
    xp_deletemail 
    xp_dirtree 
    xp_dropwebtask 
    xp_dsninfo 
    xp_enumdsn 
    xp_enumerrorlogs 
    xp_enumgroups 
    xp_enumqueuedtasks 
    xp_eventlog 
    xp_findnextmsg 
    xp_fixeddrives 
    xp_getfiledetails 
    xp_getnetname 
    xp_grantlogin 
    xp_logevent 
    xp_loginconfig 
    xp_logininfo 
    xp_makewebtask 
    xp_msver xp_perfend 
    xp_perfmonitor 
    xp_perfsample 
    xp_perfstart 
    xp_readerrorlog 
    xp_readmail 
    xp_revokelogin 
    xp_runwebtask 
    xp_schedulersignal 
    xp_sendmail 
    xp_servicecontrol 
    xp_snmp_getstate 
    xp_snmp_raisetrap 
    xp_sprintf 
    xp_sqlinventory 
    xp_sqlregister 
    xp_sqltrace 
    xp_sscanf 
    xp_startmail 
    xp_stopmail 
    xp_subdirs 
    xp_unc_to_drive 
    xp_dirtree 10. 在企业管理器中安全选项 之下禁用默认登录。(只有SQL 6.5) 当使用整合的安全时候,这使未经认可的不在 syslogins 表中使用者无权登陆一个效的数据库服务器。 11. 除去数据库的guest账户把未经认可的使用者据之在外。 例外情况是master和 tempdb 数据库,因为对他们guest帐户是必需的。 12. 若非必须,请完全地禁用SQL邮件功能。它的存在使潜在的攻击者递送潜在的 trojans ,病毒或是简单实现一个DOS攻击成为可能 13. 检查master..Sp_helpstartup看有无可疑的木马进程。 确定没有人已经在这里放置秘密的后门程序。 使用 Sp_unmakestartup 移除任何可疑进程。14. 检查master..Sp_password看有无trojan代码。比较你的产品scripts和一个新安装的系统的默认scripts而且方便的保存。 15. 记录所有的用户存取访问情况。 从企业管理器做这些设定或通过以sa登陆进入查询分析器的下列各项: 
    xp_instance_regwrite N\'HKEY_LOCAL_MACHINE\', N\'SOFTWARE\\ Microsoft\\MSSQLServer\\MSSQLServer\',N\'AuditLevel\',REG_DWORD,3 16. 重写应用程序使用更多用户定义的储存和察看进程所以一般的对表的访问可以被禁用。 在这里你也应该看到由于不必经常进行查询计划操作而带来的性能提升。 17. 除去不需要的网络协议。 18. 注意SQL 服务器的物理安全。把它锁在固定的房间里,并且注意钥匙的安全。只要有机会到服务器面前,就总是会找到一个方法进入。 19. 建立一个计划的任务运行: 
    findstr/C:\" Login Failed\"\\mssql7\\log\\*.*\' 然后再重定向输出到一个文本文件或电子邮件,因此你监测失败的登录尝试。这也为系统管理员提供一个好的记录攻击的方法。 也有很多用来分析NT日志事件的第三者工具。 注意: 你可能需要将路径换成你安装SQL的路径。 20. 设定非法访问和登陆失败日志警报。到 企业管理器中的\"Manager SQL Server Messages \"搜寻任何有关无权访问的消息 ( 从查找\"login failed\"和\"denied\"开始). 确定你所有感兴趣的信息被记录到事件日志。然后在这些信息上设定警报 , 发送一个电子邮件或信息到一个能够对问题及时响应的操作员。 21. 确定在服务器和数据库层次上的角色都只被授给了需要的用户。 当 SQL Server 安全模型 7 有许多增强的时候, 它也增加额外的许可层,我们必须监控该层,确定没有人被授予了超过必需的权限。 22. 经常检查组或角色全体会员并且确定用组分配权限,这样你的审计工作能够简化。 确定当你在的时候 , 公众的组不能从系统表执行选择操作。 23. 花些时间审计用空密码登陆的请求。 使用下面的代码进行空密码检查: 
    使用主体 
    选择名字, 
    password 
    from syslogins 
    where password is null 
    order by name 24. 如果可能,在你的组织中利用整合的安全策略。 通过使用整合的安全策略,你能够依赖系统的安全,最大简化管理工作从维护二个分开的安全模型中分离开来。这也不让密码接近连接字串。 25. 检查所有非sa用户的存取进程和扩充存储进程的权限。 使用下面的查询定期的查询哪一个进程有公众存储权限。(在SQL Server中 使用 \"type\" 而不是 \"xtype\"): 
    Use master 
    select sysobjects.name 
    from sysobjects,sysprotects 
    where sysprotects.uid=0 
    AND xtype 在 (\'X\',\'P\') 
    AND sysobjects.id=sysprotects.id 
    Order by name 26. 当时用企业管理器的时候,使用整合的安全策略。 过去,企业管理器被发现在标准的安全模态中储存 \"sa\" 密码在注册表的 plaintext 中。 注意: 即使你改变模态,密码也会留在注册表中。 使用 regedit 而且检查键:R>HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\MSSQLServer\\SQLEW\\ Regedi\\SQL 6.5 现在数据被隐藏在 
    HKEY_USERS\\\\software\\Microsoft\\Microsoft SQL server\\80\\tool\\SQLEW\\registered server X\\SQL server group 
    (\"SQL server组\" 是默认值但是你可能已建立用户组因此相应地改变其位置) 27. 发展一个审核计划而且订定每月的安全报告,对IT主管可用的报表包括任何的新exploit,成功的攻击 , 备份保护 , 和对象存取失败统计。 28. 不要允许使用者交互式登陆到 SQL Server之上。这个规则适用任何的服务器。 一旦一个使用者能够交互式进入一个服务器之内,就有能用来获得管理员的存取特权得到管理员权限。 29. 尽力限制对SQL Server的查询与存取操作。 用户可以用最小权限查询sql server中的很多东西。若非必须不要给他们机会
     
     
    SQL Server的用户及权限 
    Sybase中的用户分为两种:SQL服务器用户(登录帐号)和数据库用户。 安装完SQL服务器后,系统自动建立一个SQL服务器用户sa,口令为空,即系统管理员,他对整个系统有操作权,其他用户均由系统管理员建立。 
    在SQL Server中有三种特殊的用户:系统管理员、用户数据库所有者(建立相应数据库的数据库用户)DBO、一般用户。系统管理员对整个系统有操作权;用户数据库所有者对他所建立的数据库具有全部操作权利;一般用户对给定的数据库只有被授权的操作权限。 
    数据库用户一般可分为用户组,任一数据库在建立后即被赋予一个用户组public。 
    1、建立SQL服务器用户名(登录帐号) 
    作为一个用户,为了使用SQL Server,他必须在SQL Server上有一个SQL服务器用户名(登录帐号)。这个帐号是系统管理员通过sp_addlogin来增加的。 
    sp_addlogin 登录名,口令,库名,语言,全名 
    例:建立用户zhang, 口令为zhangling(最低六位),全名为Zhang ling 
    1> sp_addlogin zhang,zhangling,null,null,Zhang ling 
    2> go 
    3> select * from syslogins 
    4> go 
    2、增加数据库用户名 
    同样,为了使用SQL Server上的数据库,他必须在数据库中有一个用户名,这个用户名是数据库所有者通过sp_adduser来增加的。数据库用户名不必和用户帐户一样,而且在不同的数据库中用户名可以不同。多个用户可以有相同的SQL Server帐户。同样,多个SQL Server帐户可以有相同的数据库名。 
    sp_adduser 登录名,别名,组名 
    登录名为用户的SQL服务器登录名;别名为用户在数据库中的用户名;组名为用户所属的数据库用户组。 
    例:用户zhang增加为tele114的用户,别名为zhang1,属于用户组china 
    1>sp_addgroup china 
    2>go 
    1>sp_adduser zhang,zhang1,china 
    2>go 
    1> sp_helpuser 
    2> go 
    *例:删除别名zhang1,用户组china,登录名zhang 
    1> use tele114 
    2> go 
    3> sp_dropuser zhang1 
    4> go 
    5> sp_helpuser 
    6> go 
    1>sp_dropgroup china 
    2>go 
    1> sp_helpgroup 
    2> go 
    3> use master 
    4> go 
    5> sp_droplogin zhang 
    6> go 
    7> select * from syslogins 
    8> go 
    3、数据库操作授权 
    grant 命令序列 to 用户名 
    A. 系统管理员可以授予其他用户CREATE DATABASE的权限,使其他用户可以成为数据库所有者。 
    B. 数据库所有者在他所拥有的数据库中,可以授予其他用户的权限有: 
    l CREATE TABLE ------------------- 建表 
    lCREATE DEFAULT ------------------ 建缺省 
    lCREATE RULE ------------------- 建规则 
    lCREATE PROCedure ------------------ 建存储过程 
    lCREATE VIEW ------------------- 建视图 
    lDUMP DATABASE ------------------- 备份数据库 
    lDUMP TRANsaction ------------------ 备份日志 
    C. 数据库对象所有者可以授予其他用户的操作权限有: 
    l SELECT 
    l UPDATE 
    l INSERT 
    l EXECute 
    l DELETE 
    l REFERENCE 
    例:授予zhang1在数据库tele114上建表,建视图,建存储过程;对表students有select,reference权;对name,native字段有update权。 
    1> use tele114 
    2> go 
    3> grant creat table,create procedure ,create view to zhang1 
    4> go 
    5> grant select,reference on students to zhang1 with grant option 6> go 
    7> grant update on students(name,native) to zhang1 
    8> go 
    9> sp_helprotect 
    10> go 
    本篇文章来源于 黑客基地-全球最大的中文黑客站 原文链接:httpwww.hackbase.comtech2009-08-2755419_1.html
      

  3.   


    谢谢,不过希望是规范类型的,而不是对SQL Server的安全模型进行介绍。。
      

  4.   

    哎,还是自己来写了大家对这方面有兴趣的话,可以参考下面这篇文章,非常全面
    http://blogs.msdn.com/b/mwilmot/archive/2009/09/30/sql-server-2000-2008-security.aspx