当前位置:首页 » 编程语言 » sqlserver的安全配置

sqlserver的安全配置

发布时间: 2022-08-17 09:37:36

sqlserver有哪些安全策略

Microsoft建立了一种既灵活又强大的安全管理机制,它能够对用户访问SQL Server服务器系统和数据库的安全进行全面地管理。按照本文介绍的步骤,你可以为SQL Server 7.0(或2000)构造出一个灵活的、可管理的安全策略,而且它的安全性经得起考验。

一、验证方法选择
本文对验证(authentication)和授权(authorization)这两个概念作不同的解释。验证是指检验用户的身份标识;授权是指 允许用户做些什么。在本文的讨论中,验证过程在用户登录SQL Server的时候出现,授权过程在用户试图访问数据或执行命令的时候出现。
构造安全策略的第一个步骤是确定SQL Server用哪种方式验证用户。SQL Server的验证是把一组帐户、密码与Master数据库Sysxlogins表中的一个清单进行匹配。Windows NT/2000的验证是请求域控制器检查用户身份的合法性。一般地,如果服务器可以访问域控制器,我们应该使用Windows NT/2000验证。域控制器可以是Win2K服务器,也可以是NT服务器。无论在哪种情况下,SQL Server都接收到一个访问标记(Access Token)。访问标记是在验证过程中构造出来的一个特殊列表,其中包含了用户的SID(安全标识号)以及一系列用户所在组的SID。正如本文后面所介绍 的,SQL Server以这些SID为基础授予访问权限。注意,操作系统如何构造访问标记并不重要,SQL Server只使用访问标记中的SID。也就是说,不论你使用SQL Server 2000、SQL Server 7.0、Win2K还是NT进行验证都无关紧要,结果都一样。
如果使用SQL Server验证的登录,它最大的好处是很容易通过Enterprise Manager实现,最大的缺点在于SQL Server验证的登录只对特定的服务器有效,也就是说,在一个多服务器的环境中管理比较困难。使用SQL Server进行验证的第二个重要的缺点是,对于每一个数据库,我们必须分别地为它管理权限。如果某个用户对两个数据库有相同的权限要求,我们必须手工设 置两个数据库的权限,或者编写脚本设置权限。如果用户数量较少,比如25个以下,而且这些用户的权限变化不是很频繁,SQL Server验证的登录或许适用。但是,在几乎所有的其他情况下(有一些例外情况,例如直接管理安全问题的应用),这种登录方式的管理负担将超过它的优 点。
二、Web环境中的验证
即使最好的安全策略也常常在一种情形前屈服,这种情形就是在Web应用中使用SQL Server的数据。在这种情形下,进行验证的典型方法是把一组SQL Server登录名称和密码嵌入到Web服务器上运行的程序,比如ASP页面或者CGI脚本;然后,由Web服务器负责验证用户,应用程序则使用它自己的 登录帐户(或者是系统管理员sa帐户,或者为了方便起见,使用Sysadmin服务器角色中的登录帐户)为用户访问数据。
这种安排有几个缺点,其中最重要的包括:它不具备对用户在服务器上的活动进行审核的能力,完全依赖于Web应用程序实现用户验证,当SQL Server需要限定用户权限时不同的用户之间不易区别。如果你使用的是IIS 5.0或者IIS 4.0,你可以用四种方法验证用户。第一种方法是为每一个网站和每一个虚拟目录创建一个匿名用户的NT帐户。此后,所有应用程序登录SQL Server时都使用该安全环境。我们可以通过授予NT匿名帐户合适的权限,改进审核和验证功能。
第二种方法是让所有网站使用Basic验证。此时,只有当用户在对话框中输入了合法的帐户和密码,IIS才会允许他们访问页面。IIS依靠一个NT 安全数据库实现登录身份验证,NT安全数据库既可以在本地服务器上,也可以在域控制器上。当用户运行一个访问SQL Server数据库的程序或者脚本时,IIS把用户为了浏览页面而提供的身份信息发送给服务器。如果你使用这种方法,应该记住:在通常情况下,浏览器与服 务器之间的密码传送一般是不加密的,对于那些使用Basic验证而安全又很重要的网站,你必须实现SSL(Secure Sockets Layer,安全套接字层)。
在客户端只使用IE 5.0、IE 4.0、IE 3.0浏览器的情况下,你可以使用第三种验证方法。你可以在Web网站上和虚拟目录上都启用NT验证。IE会把用户登录计算机的身份信息发送给IIS,当 该用户试图登录SQL Server时IIS就使用这些登录信息。使用这种简化的方法时,我们可以在一个远程网站的域上对用户身份进行验证(该远程网站登录到一个与运行着Web 服务器的域有着信任关系的域)。
最后,如果用户都有个人数字证书,你可以把那些证书映射到本地域的NT帐户上。个人数字证书与服务器数字证书以同样的技术为基础,它证明用户身份标 识的合法性,所以可以取代NT的Challenge/Response(质询/回应)验证算法。Netscape和IE都自动在每一个页面请求中把证书信 息发送给IIS。IIS提供了一个让管理员把证书映射到NT帐户的工具。因此,我们可以用数字证书取代通常的提供帐户名字和密码的登录过程。
由此可见,通过NT帐户验证用户时我们可以使用多种实现方法。即使当用户通过IIS跨越Internet连接SQL Server时,选择仍旧存在。因此,你应该把NT验证作为首选的用户身份验证办法。
三、设置全局组
构造安全策略的下一个步骤是确定用户应该属于什么组。通常,每一个组织或应用程序的用户都可以按照他们对数据的特定访问要求分成许多类别。例如,会 计应用软件的用户一般包括:数据输入操作员,数据输入管理员,报表编写员,会计师,审计员,财务经理等。每一组用户都有不同的数据库访问要求。

② 如何防止SQLserver服务器被黑

一、基本安全设定:
(1)文件系统的设定 windows2000server 支持多种文件系统,最安全的要数NTFS文件系统,如果你的windows2000server要用作服务器,最好将所有的分区都格式化为NTFS文件系统,fat32是不能用的。
(2)补丁(pack) 目前windows2000已经到sp4了,这个大补丁一定要装的,安装sp4后再到网络上升级,将微软提供的各种重要系统安全更新全部都升级,不要怕麻烦,这是防病毒和黑客攻击的非常重要安全设置步骤。
(3)帐号安全帐号是windows2000server的重要的安全保证,要注意区分一些工作组的权限: administrators是系统管理员组,administrator是系统默认的管理帐号,administrator最好设置一个复杂的密码,复杂到什么程度呢?简单的说,自己都要记不住这个密码,这个密码可以是字符、数字、符号、大小写的组合(如:AGgF!452KhtUN),密码不要让别人猜得到,不要用自己得电话号码啦之类的东西,最好在笔记本上将密码设定好后再设置,设好密码后妥善保管记录密码的笔记本,每隔一段时间更改自己的密码 guest帐号最好禁止使用,如果没有必要,不要添加其他的系统管理员帐号。
(4)关闭不必要的服务在服务中将一些不常用的服务关闭(比如打印、远程注册表操作,信息发送等不必要的服务)。
(5)网络协议如果没有其他的用途,windows2000server只需要安装tcp/ip协议,其他不必要的协议统统删除。(6)如果没必要,IIS一定不要安装(如果需要安装iis,那么看后面的设置) IIS是windows2000server中最不安全的组件,不装IIS,windows2000将是很安全的。
(7)默认共享的删除 windows2000server默认的共享有以下几种 c$ d$ e$ ..... IPC$ ADMIN$ 这些默认共享一定要关,否者hk利用简单的Net use命令就可以将你的服务器黑掉下面提供简单的关闭这些共享的方法 A、建立一个批处理文件,如a.bat B、在该批处理文件中添加下面的语句 net share c$ /del (这是取消c盘的默认共享,同理 net share d$ /del 是取消d盘的共享,你有多少个盘符,就编多少个以上的语句) net share ipc$/del (删除ipc默认共享) net share admin$ /del (删除 admin默认共享) C 、将以上的语句添加完后,将该文件放入开始菜单中程序中启动文件夹中,让windows2000server每次启动都将默认的共享删除(7)CMD的设置 cmd.exe是windows2000中非常重要的文件,很多漏洞都是要*调用该个文件,该文件在windows2000server所在目录的system32中,我们需要对其进行设定 A、将该文件从system32中拷贝出来放在其他地方,将原来的文件删除 B、将拷贝出来的文件进行权限设定,只允许administrator访问,不允许其他任何的工作组或用户访问该文件。
(8)windows2000server终端服务(默认3389端口) windows2000server提供了远程终端服务,此服务方便了网络管理员对服务器的远程管理,但是,该服务也为黑客提供了非常危险的攻击,网络黑客口中的所谓跳板(肉鸡)绝大部分都是利用该功能进行自我隐蔽的攻击。一旦系统管理员的密码被破解,而该服务器又提供终端服务,黑客就可以完全控制了该服务器,不但服务器的各种资料会完全暴露,而且黑客还会利用这台服务器去攻击其他的服务器,因此该服务除非你觉得自己的服务器足够安全,否则最好不要打开,特别是暴露在互连网络中的服务器,打开该功能一定要小心谨慎。 A、如何知道自己的终端服务是否打开?终端服务需要安装,我们可以通过控制面板中的添加/删除程序中的添加/删除windows组件来安装,在windows组件向导列表中最下面有两个组件,一个是“终端服务”,一个是“终端服务授权”,我们只需要安装“终端服务”这个组件就可以将该功能启用,一旦启用了该功能,默认的情况下,我们的tcp3389端口就会打开。所以,我们看看这个地方,如果你的组件“终端服务”前面打了勾,就表明你已经打开了该服务。有些黑客手段很高明,一旦控制了你的计算机后,可以远程打开该服务,这种情况下,我们最好检查windows2000server启用了哪些服务,如何检查呢?打开windows2000server的服务管理(开始菜单——程序——管理工具——服务)。在服务列表中检查Terminal Services这项服务的状态,看看如果该服务处于“ 禁用”状态,说明该服务没打开,如果该服务处于“已启动”状态,说明该服务已经打开。 B、如何关闭该服务!第一步,通过控制面板中的添加/删除程序中的添加/删除windows组件来将该服务组件删除第二步,在服务中将Terminal Services服务禁用注意:需要经常检查该服务是否被非法启动,如果你在你没有启动该服务的情况下你发现它已打开,非常不幸,你的服务器已经被黑,成为了别人的跳板(肉鸡)最好的解决方法是重作服务器系统,不要以为关闭该服务就行了。
(9)telnet服务(默认23端口)相对于3389来讲,telnet服务更不容易引起管理员的注意,该服务以前是UNIX和Linux类系统提供的远程管理终端服务,windows2000server也提供了,它也是一个终端服务,只不过telnet服务是字符界面,而3389服务是图形界面,二者都能完全远程控制服务器的所有功能。我以前在利用肉鸡的时候,一般都不用3389,为什么呢?该服务速度慢,我一般都是打开肉鸡的telnet服务,速度非常快,功能也很全面,又不容易被发觉 A、如何知道自己的telnet服务是否打开?在windows2000server控制面板——管理工具中有一项“Telnet 服务器管理”(对应的文件是system32中的tlntadmn.exe),这就是该服务的开关,我们可以利用该程序配置我们的telnet服务。打开开始菜单——程序——管理工具——服务,在服务列表中有该服务对应的一项“Telnet”,默认的情况下,该服务状态是“手动”,如果,该服务是“已启动”状态,说明该服务已经启动了,你可以用以下命令连接在windows(98/2000/xp/2003)字符模式下输入: telnet 服务器的IP地址如果出现了登陆界面,非常不幸,你的telnet服务真的已开,如果不是你开的,非常不幸,你被黑了,你可能成为了肉鸡。 B、如何关闭该服务!打开开始菜单——程序——管理工具——服务,在服务中将telnet服务禁用建议:最好将system32中的tlntadmn.exe拷贝出来放到其他文件夹中并改名,并将该文件从system32中删除。随时检查telnet服务的状态,如果该服务是“已启动”状态,而又不是你启动的,最好重新安装服务器系统。最好随时扫描你的服务器所开的端口,如果23端口已开或有一些不知名的端口已开(因为黑客很可能会将提供该服务的端口改为其他的端口来逃避检查),用telnet命令测试一下,看看能不能连接。附:telnet命令格式 telnet ip地址端口如:telnet 192.168.1.1 (连接服务器192.168.1.1的默认23端口)如:telnet 192.168.1.1555 (连接服务器192.168.1.1的555端口) SQL Server 2000的安全配置在进行SQL Server 2000数据库的安全配置之前,首先你必须对操作系统进行安全配置,保证你的操作系统处于安全状态。然后对你要使用的操作数据库软件(程序)进行必要的安全审核,比如对ASP、PHP等脚本,这是很多基于数据库的WEB应用常出现的安全隐患,对于脚本主要是一个过滤问题,需要过滤一些类似 , ‘ @ / 等字符,防止破坏者构造恶意的SQL语句。接着,安装SQL Server2000后请打上补丁sp1以及最新的sp2。 1、使用安全的密码策略我们把密码策略摆在所有安全配置的第一步,请注意,很多数据库帐号的密码过于简单,这跟系统密码过于简单是一个道理。对于sa更应该注意,同时不要让sa帐号的密码写于应用程序或者脚本中。健壮的密码是安全的第一步!SQL Server2000安装的时候,如果是使用混合模式,那么就需要输入sa的密码,除非你确认必须使用空密码。这比以前的版本有所改进。同时养成定期修改密码的好习惯。数据库管理员应该定期查看是否有不符合密码要求的帐号。比如使用下面的SQL语句:Use master Select name,Password from syslogins wherepassword is null
2、使用安全帐号策略:由于SQL Server不能更改sa用户名称,也不能删除这个超级用户,所以,我们必须对这个帐号进行最强的保护,当然,包括使用一个非常强壮的密码,最好不要在数据库应用中使用sa帐号,只有当没有其它方法登录到 SQL Server 实例(例如,当其它系统管理员不可用或忘记了密码)时才使用 sa。建议数据库管理员新建立个拥有与sa一样权限的超级用户来管理数据库。安全的帐号策略还包括不要让管理员权限的帐号泛滥。SQL Server的认证模式有Windows身份认证和混合身份认证两种。如果数据库管理员不希望操作系统管理员来通过操作系统登陆来接触数据库的话,可以在帐号管理中把系统帐号“BUILTIN\Administrators”删除。不过这样做的结果是一旦sa帐号忘记密码的话,就没有办法来恢复了。很多主机使用数据库应用只是用来做查询、修改等简单功能的,请根据实际需要分配帐号,并赋予仅仅能够满足应用要求和需要的权限。比如,只要查询功能的,那么就使用一个简单的public帐号能够select就可以了。
3、加强数据库日志记录:审核数据库登录事件的“失败和成功”,在实例属性中选择“安全性”,将其中的审核级别选定为全部,这样在数据库系统和操作系统日志里面,就详细记录了所有帐号的登录事件。请定期查看SQL Server日志检查是否有可疑的登录事件发生,或者使用DOS命令。findstr /C:"登录" d:\Microsoft SQL Server\MSSQL\LOG\*.*
4、管理扩展存储过程:对存储过程进行大手术,并且对帐号调用扩展存储过程的权限要慎重。其实在多数应用中根本用不到多少系统的存储过程,而SQL Server的这么多系统存储过程只是用来适应广大用户需求的,所以请删除不必要的存储过程,因为有些系统的存储过程能很容易地被人利用起来提升权限或进行破坏。如果你不需要扩展存储过程xp_cmdshell请把它去掉。使用这个SQL语句:use master sp_dropextendedproc xp_cmdshellxp_cmdshell是进入操作系统的最佳捷径,是数据库留给操作系统的一个大后门。如果你需要这个存储过程,请用这个语句也可以恢复过来。sp_addextendedproc xp_cmdshell, xpsql70.dll 如果你不需要请丢弃OLE自动存储过程(会造成管理器中的某些特征不能使用),这些过程包括如下:Sp_OACreateSp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty Sp_OAMethod Sp_OASetProperty Sp_OAStop 去掉不需要的注册表访问的存储过程,注册表存储过程甚至能够读出操作系统管理员的密码来,如下:Xp_regaddmultistring Xp_regdeletekeyXp_regdeletevalue Xp_regenumvaluesXp_regread Xp_regremovemultistring Xp_regwrite 还有一些其他的扩展存储过程,你也最好检查检查。在处理存储过程的时候,请确认一下,避免造成对数据库或应用程序的伤害。
5、使用协议加密:SQL Server 2000使用的Tabular Data Stream协议来进行网络数据交换,如果不加密的话,所有的网络传输都是明文的,包括密码、数据库内容等等,这是一个很大的安全威胁。能被人在网络中截获到他们需要的东西,包括数据库帐号和密码。所以,在条件容许情况下,最好使用SSL来加密协议,当然,你需要一个证书来支持。
6、不要让人随便探测到你的TCP/IP端口:默认情况下,SQL Server使用1433端口监听,很多人都说SQL Server配置的时候要把这个端口改变,这样别人就不能很容易地知道使用的什么端口了。可惜,通过微软未公开的1434端口的UDP探测可以很容易知道SQL Server使用的什么TCP/IP端口了。不过微软还是考虑到了这个问题,毕竟公开而且开放的端口会引起不必要的麻烦。在实例属性中选择TCP/IP协议的属性。选择隐藏 SQL Server 实例。如果隐藏了 SQL Server 实例,则将禁止对试图枚举网络上现有的 SQL Server 实例的客户端所发出的广播作出响应。这样,别人就不能用1434来探测你的TCP/IP端口了(除非用Port Scan)。
7、修改TCP/IP使用的端口:请在上一步配置的基础上,更改原默认的1433端口。在实例属性中选择网络配置中的TCP/IP协议的属性,将TCP/IP使用的默认端口变为其他端口. 9、拒绝来自1434端口的探测由于1434端口探测没有限制,能够被别人探测到一些数据库信息,而且还可能遭到DOS攻击让数据库服务器的CPU负荷增大,所以对Windows 2000操作系统来说,在IPSec过滤拒绝掉1434端口的UDP通讯,可以尽可能地隐藏你的SQL Server。10、对网络连接进行IP限制SQL Server 2000数据库系统本身没有提供网络连接的安全解决办法,但是Windows 2000提供了这样的安全机制。使用操作系统自己的IPSec可以实现IP数据包的安全性。请对IP连接进行限制,只保证自己的IP能够访问,也拒绝其他IP进行的端口连接,把来自网络上的安全威胁进行有效的控制。关于IPSec的使用请参看:http://www.microsoft.com/china/technet/security/ipsecloc.asp 上面主要介绍的一些SQL Server的安全配置,经过以上的配置,可以让SQL Server本身具备足够的安全防范能力。当然,更主要的还是要加强内部的安全控制和管理员的安全培训,而且安全性问题是一个长期的解决过程,还需要以后进行更多的安全维护一、概述在应用系统中,数据库往往是最核心的部分,一旦数据库毁坏或损坏,将会带来巨大的损失,所以数据库的管理越来越重要。我们在做数据库管理与维护工作中,不可避免会出现各种各样的错误,本文针对数据库的日志文件丢失时如何利用MDF文件恢复数据库的方法进行了研究。二、数据库的恢复当数据库的主数据MDF文件完好无损时,在丢失了LDF文件的情况下,如何利用MDF文件恢复数据库?我们把SQL Server的日志文件分为两类:一类是无活动事务的日志,另一类是含活动事务的日志,根据不同的日志,采取不同的方法来恢复数据库。
1. 无活动事务的日志恢复:无活动事务的日志丢失时,我们很容易利用MDF文件直接恢复数据库,具体方法如下:
①.分离被质疑的数据库,可用企业管理器中的"分离数据库工具",或者用存储过程sp_detach_db分离数据库;②利用MDF文件附加数据库生成新的日志文件,可用企业管理器中的"附加数据库"的工具,或者用存储过程sp_attach_single_file_db附加数据库。如果数据库的日志文件中含有活动事务,利用此方法就不能恢复数据库。
2. 含活动事务的日志恢复:含有活动事务的日志丢失时,利用上述方法就会出现"数据库和日志文件不符合,不能附加数据库"。对于这种情况下,我们采用如下方法:
①新建同名数据库AAA,并设它为紧急模式•停止SQL Server服务器;•把数据库主数据MDF文件移走;•启SQL Server服务器,新建一个同名的数据库AAA;•停止SQL Server服务器,把移走的MDF文件再覆盖回来;•启动SQL Server服务器,把AAA设为紧急模式,不过默认情况下,系统表是不能随便修改的,必须首先设置一下使其能被修改,运行以下语句即可: Use Master Gosp_configure ’allow updates’,1 reconfigure with override Go 接着运行以下语句,把AAA数据库设为紧急模式,即把Sysdatabases表中AAA数据库的status属性设为’37268’,就表示把AAA数据库处于紧急模式。 updatesysdatabases set status=32768 where hame=’AAA’如果没有报告什么错误,就可以进行以下操作。
②设置数据库AAA为单用户模式,并检查数据库•重启SQL Server服务器;•把数据库AAA设为单用户模式Sp_dboption ’AAA’, ’single user’, ’true’ •运行以下语句,检查数据库AAA DBCCCHECKDB(’AAA’) 如果没有什么大的问题就可以把数据库的状态改回去。
③还原数据库的状态运行以下语句,就可以把数据库的状态还原: update sysdatabases set status=28 wherename=’AAA’ sp_configure ’allow updates’,0 reconfigure with override Go 如果没有什么大的问题,刷新一下数据库,数据库AAA又会出现在你面前,但目前恢复工作还没有做完,此时的数据库仍不能工作,还要进行下面的处理,才能真正恢复。④利用DTS的导入导出向导,把数据库AAA导入到一个新建数据库BBB中•新建一个数据库BBB; •右击BBB,选择IMPORT功能,打开导入向导;•目标源选择"在SQL Server数据库之间复制对象和数据库",这样可以把表结构,数据

③ 如何配置sqlserver 设置远程访问

er】远程访问数据库进行配置

团队间开发,需要使用同一个数据库服务器,所以大家必须都可以使用IP地址来访问数据库。

通常访问数据库的方式,有三种

1、直接访问本地数据库,在服务器名称里,输入“ . " ,这个圆点。

右击数据库实例→点击属性→点击安全

设置为SQLServer和windows认证即可

④ 如何配置sqlserver 以允许远程连接

1、打开Navicat,右键点击左边的空白地方,然后创建一个连接,选择sql server类型。

⑤ 如何保证SQLServer数据库安全

目前,针对SQL Server数据库的应用级入侵已经变得越来越肆无忌惮,像SQL注入、跨站点脚本攻击和未经授权的用户访问等。所有这些入侵都有可能绕过前台安全系统并对数据库系统攻击。对于数据库管理来说,保护数据不受内部和外部侵害是一项重要的工作。SQL Server 正日益广泛的使用于各部门内外,作为数据库系统管理员,需要深入的理解SQL Server的安全性控制策略,以实现管理安全性的目标。那么,如何确保SQL Server数据库的安全性呢,我们可以从以下两方面考虑。it培训机构
首先、采取业界已存在的且比较成熟的数据库审计解决方案来实现
实时记录用户对数据库系统的所有操作(如:插入、删除、更新、用户自定义操作等),并还原SQL操作命令包括源IP地址、目的IP地址、访问时间、用户名、数据库操作类型、数据库表名、字段名等,如此,可实现对数据库安全事件准确全程跟踪定位。
实时检查数据库不安全配置、数据库潜在弱点、数据库用户弱口令、数据库软件补丁层次、数据库潜藏木马等。
进行全方位的多层(应用层、中间层、数据库层)的访问审计,通过多层业务审计,实现数据操作原始访问者的精确定位。
针对于数据库的操作行为进行实时检测,并预设置风险控制策略,结合对数据库活动的实时监控信息,进行特征检测,任何尝试性的攻击操作都将被检测到并进行阻断或告警;并支持通过邮件、短信、SYSLOG、SNMP、屏幕等方式告警。
其次、制定相关的数据库管理流程
不同的人员对数据库的操作职责不一样,所有人员对数据库的操作均需要事前审批,对一些非常重要的操作需要二级以上审批。申请操作时,需明确在什么人,什么时间,因为何事,对哪个数据库(或表),进行什么样的操作,可能有什么样的风险及采取的补救措施等。
数据库数据的丢失以及数据库被非法用户的侵入使得数据库管理员身心疲惫不堪,数据库安全性问题对于数据库管理员来说简直就是噩梦。对于数据库数据的安全问题。本文对围绕数据库的安全性问题提出了一些安全性策略,希望对数据库管理员有所帮助。

⑥ 当SQLServer不能被访问时如何设置防火墙

需要配置Windows防火墙,允许SQLServer的远程连接。
具体操作过程为:
1、首先是要检查SQLServer数据库服务器中是否允许远程链接。
2、为微软SQL服务器(MSSQLServer)配置相应协议。
3、检查SQL服务器防火墙设置(快捷步骤-直接关闭防火墙(不安全))

⑦ sqlserver 安全配置在哪

sqlserver 安全配置在哪
MSSQL Server 2008的身份验证模式有两种:一种是Windows 身份验证模式, 另一种是SQL Server和Windows身份验证模式(即混合模式)。对大多数数据库服务器来说,有SQL Server身份验证就足够了,只可惜目前的服务器身份验证模式里没有这个选项,所以我们只能选择同时带有SQL Server和Windows身份验证的模式(混合模式)。

⑧ 如何提高SQL Server的安全性控制

SQLServer2000的安全配置在进行SQLServer2000数据库的安全配置之前,首先你必须对操作系统进行安全配置,保证你的操作系统处于安全状态。然后对你要使用的操作数据库软件(程序)进行必要的安全审核,比如对ASP、PHP等脚本,这是很多基于数据库的WEB应用常出现的安全隐患,对于脚本主要是一个过滤问题,需要过滤一些类似,‘;@/等字符,防止破坏者构造恶意的SQL语句。接着,安装SQLServer2000后请打上补丁sp1,sp2以及最新的sp3,sp4。在做完上面三步基础之后,我们再来讨论SQLServer的安全配置。1、使用安全的密码策略我们把密码策略摆在所有安全配置的第一步,请注意,很多数据库帐号的密码过于简单,这跟系统密码过于简单是一个道理。对于sa更应该注意,同时不要让sa帐号的密码写于应用程序或者脚本中。健壮的密码是安全的第一步!SQLServer2000安装的时候,如果是使用混合模式,那么就需要输入sa的密码,除非你确认必须使用空密码。这比以前的版本有所改进。同时养成定期修改密码的好习惯。数据库管理员应该定期查看是否有不符合密码要求的帐号。比如使用下面的SQL语句:UsemasterSelectname,、使用安全的帐号策略由于SQLServer不能更改sa用户名称,也不能删除这个超级用户,所以,我们必须对这个帐号进行最强的保护,当然,包括使用一个非常强壮的密码,最好不要在数据库应用中使用sa帐号,只有当没有其它方法登录到SQLServer实例(例如,当其它系统管理员不可用或忘记了密码)时才使用sa。建议数据库管理员新建立个拥有与sa一样权限的超级用户来管理数据库。安全的帐号策略还包括不要让管理员权限的帐号泛滥。SQLServer的认证模式有Windows身份认证和混合身份认证两种。如果数据库管理员不希望操作系统管理员来通过操作系统登陆来接触数据库的话,可以在帐号管理中把系统帐号“BUILTIN\Administrators”删除。不过这样做的结果是一旦sa帐号忘记密码的话,就没有法来恢复了。很多主机使用数据库应用只是用来做查询、修改等简单功能的,请根据实际需要分配帐号,并赋予仅仅能够满足应用要求和需要的权限。比如,只要查询功能的,那么就使用一个简单的public帐号能够select就可以了。3、加强数据库日志的记录审核数据库登录事件的“失败和成功”,在实例属性中选择“安全性”,将其中的审核级别选定为全部,这样在数据库系统和操作系统日志里面,就详细记录了所有帐号的登录事件。请定期查看SQLServer日志检查是否有可疑的登录事件发生,或者使用DOS命令。findstr/C:"登录"d:\MicrosoftSQLServer\MSSQL\LOG\*.*4、管理扩展存储过程对存储过程进行大手术,并且对帐号调用扩展存储过程的权限要慎重。其实在多数应用中根本用不到多少系统的存储过程,而SQLServer的这么多系统存储过程只是用来适应广大用户需求的,所以请删除不必要的存储过程,因为有些系统的存储过程能很容易地被人利用起来提升权限或进行破坏。如果你不需要扩展存储过程xp_cmdshell请把它去掉。使用这个SQL语句:usemastersp_dropextendedproc'xp_cmdshell'xp_cmdshell是进入操作系统的最佳捷径,是数据库留给操作系统的一个大后门。如果你需要这个存储过程,请用这个语句也可以恢复过来。sp_addextendedproc'xp_cmdshell','xpsql70.dll'如果你不需要请丢弃OLE自动存储过程(会造成管理器中的某些特征不能使用),这些过程包括如下:Sp_OACreateSp_OADestroySp_OAGetErrorInfoSp_OAGetPropertySp_OAMethodSp_OASetPropertySp_OAStop去掉不需要的注册表访问的存储过程,注册表存储过程甚至能够读出操作系统管理员的密码来,如下:Xp_regaddmultistringXp_regdeletekeyXp_regdeletevalueXp_regenumvaluesXp_regreadXp_regremovemultistringXp_regwrite还有一些其他的扩展存储过程,你也最好检查检查。在处理存储过程的时候,请确认一下,避免造成对数据库或应用程序的伤害。5、使用协议加密SQLServer2000使用的TabularDataStream协议来进行网络数据交换,如果不加密的话,所有的网络传输都是明文的,包括密码、数据库内容等等,这是一个很大的安全威胁。能被人在网络中截获到他们需要的东西,包括数据库帐号和密码。所以,在条件容许情况下,最好使用SSL来加密协议,当然,你需要一个证书来支持。6、不要让人随便探测到你的TCP/IP端口默认情况下,SQLServer使用1433端口监听,很多人都说SQLServer配置的时候要把这个端口改变,这样别人就不能很容易地知道使用的什么端口了。可惜,通过微软未公开的1434端口的UDP探测可以很容易知道SQLServer使用的什么TCP/IP端口了。不过微软还是考虑到了这个问题,毕竟公开而且开放的端口会引起不必要的麻烦。在实例属性中选择TCP/IP协议的属性。选择隐藏SQLServer实例。如果隐藏了SQLServer实例,则将禁止对试图枚举网络上现有的SQLServer实例的客户端所发出的广播作出响应。这样,别人就不能用1434来探测你的TCP/IP端口了(除非用PortScan)。7、修改TCP/IP使用的端口请在上一步配置的基础上,更改原默认的1433端口。在实例属性中选择网络配置中的TCP/IP协议的属性,将TCP/IP使用的默认端口变为其他端口.9、拒绝来自1434端口的探测由于1434端口探测没有限制,能够被别人探测到一些数据库信息,而且还可能遭到DOS攻击让数据库服务器的CPU负荷增大,所以对Windows2000操作系统来说,在IPSec过滤拒绝掉1434端口的UDP通讯,可以尽可能地隐藏你的SQLServer。10、对网络连接进行IP限制SQLServer2000数据库系统本身没有提供网络连接的安全解决法,但是Windows2000提供了这样的安全机制。使用操作系统自己的IPSec可以实现IP数据包的安全性。请对IP连接进行限制,只保证自己的IP能够访问,也拒绝其他IP进行的端口连接,把来自网络上的安全威胁进行有效的控制。

⑨ SQLServer安全规划全攻略的设置全局组

构造安全策略的下一个步骤是确定用户应该属于什么组。通常,每一个组织或应用程序的用户都可以按照他们对数据的特定访问要求分成许多类别。例如,会计应用软件的用户一般包括:数据输入操作员,数据输入管理员,报表编写员,会计师,审计员,财务经理等。每一组用户都有不同的数据库访问要求。
控制数据访问权限最简单的方法是,对于每一组用户,分别地为它创建一个满足该组用户权限要求的、域内全局有效的组。我们既可以为每一个应用分别创建组,也可以创建适用于整个企业的、涵盖广泛用户类别的组。
然而,如果你想要能够精确地了解组成员可以做些什么,为每一个应用程序分别创建组是一种较好的选择。例如,在前面的会计系统中,我们应该创建Data Entry Operators、Accounting Data Entry Managers等组。请记住,为了简化管理,最好为组取一个能够明确表示出作用的名字。
除了面向特定应用程序的组之外,我们还需要几个基本组。基本组的成员负责管理服务器。按照习惯,我们可以创建下面这些基本组:SQL Server Administrators,SQL Server Users,SQL Server Denied Users,SQL Server DB Creators,SQL Server Security Operators,SQL Server Database Security Operators,SQL Server Developers,以及 DB_Name Users(其中DB_Name是服务器上一个数据库的名字)。当然,如果必要的话,你还可以创建其他组。
创建了全局组之后,接下来我们可以授予它们访问SQL Server的权限。首先为SQL Server Users创建一个NT验证的登录并授予它登录权限,把Master数据库设置为它的默认数据库,但不要授予它访问任何其他数据库的权限,也不要把这个登录帐户设置为任何服务器角色的成员。
接着再为SQL Server Denied Users重复这个过程,但这次要拒绝登录访问。在SQL Server中,拒绝权限始终优先。创建了这两个组之后,我们就有了一种允许或拒绝用户访问服务器的便捷方法。
为那些没有直接在Sysxlogins系统表里面登记的组授权时,我们不能使用Enterpris Managr,因为Enterprise Manager只允许我们从现有登录名字的列表选择,而不是域内所有组的列表。要访问所有的组,请打开Query Analyzer,然后用系统存储过程sp_addsrvrolemember以及sp_addrolemember进行授权。
对于操作服务器的各个组,我们可以用sp_addsrvrolemember存储过程把各个登录加入到合适的服务器角色:SQL Server Administrators成为Sysadmins角色的成员,SQL Server DB Creators成为Dbcreator角色的成员,SQL Server Security Operators成为Securityadmin角色的成员。
注意sp_addsrvrolemember存储过程的第一个参数要求是帐户的完整路径。例如,BigCo域的JoeS应该是bigcojoes(如果你想用本地帐户,则路径应该是server_namejoes)。
要创建在所有新数据库中都存在的用户,你可以修改Model数据库。为了简化工作,SQL Server自动把所有对Model数据库的改动复制到新的数据库。只要正确运用Model数据库,我们无需定制每一个新创建的数据库。另外,我们可以用sp_addrolemember存储过程把SQL Server Security Operators加入到db_securityadmin,把SQL Server Developers加入到db_owner角色。
注意我们仍然没有授权任何组或帐户访问数据库。事实上,我们不能通过Enterprise Manager授权数据库访问,因为Enterprise Manager的用户界面只允许我们把数据库访问权限授予合法的登录帐户。
SQL Server不要求NT帐户在我们把它设置为数据库角色的成员或分配对象权限之前能够访问数据库,但Enterprise Manager有这种限制。尽管如此,只要我们使用的是sp_addrolemember存储过程而不是Enterprise Manager,就可以在不授予域内NT帐户数据库访问权限的情况下为任意NT帐户分配权限。
到这里为止,对Model数据库的设置已经完成。但是,如果你的用户群体对企业范围内各个应用数据库有着类似的访问要求,你可以把下面这些操作移到Model数据库上进行,而不是在面向特定应用的数据库上进行。

⑩ 与SQL SERVER 安全控制相关的几点说明

与SQL SERVER安全控制相关的几点说明

(一)几个基本术语

身份验证(Authentication)是指通过提交服务器评估的凭据以登录到主体请求访问的 SQL Server 的过程。身份验证可以确定接受身份验证的用户或进程的标识。

用户、账户、账号、登录名、[数据库]用户名
用户是指能够在SQL Server安全机制下,访问数据库对象中的数据的操作员或客户。用户若要访问数据库对象,必须获得数据库管理员(DBA)分配的账号和密码。从SQL Server管理系统的角度来看,用户就是一组匹配的账户和密码。
账户和账号是一个概念的不同说法,在服务器中的账户又叫登录名(Login Name),因此访问服务器也称为登录服务器。服务器的登录名可以映射到数据库中成为[数据库]用户名(User Name)。一个登录名可以映射多个数据库用户,而一个用户只能映射一个登录名。
连接或登录SQL Server服务器时是用的登录名而非用户名登录的,程序里面的连接字符串中的用户名也是指登录名。
通常用户名与登录名相同(不是强制相同,但为了一目了然通常都在创建用户名时使用与登录名相同的名字)。
提示:登录名(Login Name)和用户名(User Name)是两个不同的概念:
登录名:服务器方的一个实体,登录名只能进入SQL Server服务器,但是不能让用户访问服务器中的数据库资源。
用户名:一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。
登录名作用于它所在的服务器。每个登录名的定义存放在master系统数据库的syslogins表中。
用户名作用于它所在的数据库。用户定义信息存放在每个数据库的sysusers表中。用登录名登录到SQL Server后,在访问操作各个数据库时,SQL Server会自动查询此数据库中是否存在与此登录名关联的用户名,若存在就使用此用户的权限访问此数据库,若不存在就是用guest用户访问此数据库(guest是一个特殊的用户名,后面会讲到)。

SQL身份验证:适合于非windows平台的用户或Internet用户,需要提供账户和密码。
Windows身份验证:适合于windows平台用户,利用Windows账户和windows集成验证,不需要提供密码。
用户想要操作数据库的某个对象(如某张表)需要过三关:
第一关:我们需要登录到SQL Server系统,即需要登录账户;
第二关:我们需要访问某个数据库,即需要该数据库的用户账户;
第三关:我们需要访问数据库中的某个对象(如某张表),需要有该对象的权限。

主体(principal)是可被授予对安全资源的访问权限的实体(例如登录名、用户、进程、组或角色)。主体可以是主体的集合(比如数据库角色或Windows组)或不可分割的主体(比如本地登录或域登录)。每个主体都具有一个 ID (identification)和一个安全 ID (SID)。
⊙ Windows级别的主体:Windows组、Windows域登录名、Windows本地登录名。
⊙ SQL Server级的主体:服务器角色、SQLServer登录名。
⊙数据库级的主体:数据库角色、数据库用户、应用程序角色。

上下文切换 (context switch),更改检查执行语句或执行操作的权限时所依据的标识。

服务器(server)
1)指安装了SQL SERVER的计算机。2)指SQL Server实例——计算机上运行的 SQLServer的副本。3)指为用户提供服务的计算机软件或组件。
需要根据上下文理解。

注册服务器
注册服务器使您可以存储服务器连接信息(服务器的类型、服务器的名称、登录到服务器时使用的身份验证的类型等),以供将来连接时使用——下次连接该服务器时,不需要重新输入登录信息。
SQLServer 2000在SQL Server企业管理器中注册服务器,才能使用 SQL Server企业管理器来管理这些服务器。从SQLServer 2005始,在 SQL ServerManagement Studio 中注册服务器,才能使用 SQL Server Management Studio 来管理这些服务器。
在 Microsoft SQL Server中,可以注册以下类型的服务器:SQLServer数据库引擎、Analysis Services、Reporting Services、IntegrationServices和 SQL Server Compact 3.5SP1。

(二)SQL Server实例(SQL Server instance)
SQLServer实例(SQL Server instance),简称实例 (instance),是计算机上运行的SQLServer 的副本。同一台计算机上可以安装运行的多个 SQLServer副本。每个SQL Server实例都包含数据库引擎、Analysis Services和 ReportingServices的 SQL Server,每个SQL Server数据库实例各有一套不为其他实例共享的系统及用户数据库。
数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务。
实例又分为“默认实例”(default instance)和“命名实例”(namedinstance),如果在一台计算机上安装第一个SQLSERVER,命名设置保持默认的话,那这个实例就是默认实例。默认实例与安装计算机具有相同名称。命名实例指安装SQL Server时给定了名称,可以安装多个命名实例,给定名称是为了与同一台计算机上的其他命名实例和默认实例区分开。

SQLServer应用程序可以通过仅指定服务器名称而连接到 SQLServer的默认实例。SQL Server应用程序在连接到服务器上的某个命名实例时必须既指定服务器名称又指定实例名称,计算机名称\实例名称。
一台计算机上最多只有一个默认实例,也可以没有默认实例,默认实例名与计算机名相同。如果要访问本机上的默认SQL服务器实例,使用计算机名、(local)、localhost、127.0.0.1、.、本机IP地址,都可以达到相同的目的。但如果要访问非本机的SQL服务器,那就必须使用计算机名称\实例名称。

默认实例和命名实例的区别:
1、服务中服务名称的区别:
(1)默认实例:MSSQLSERVER。
(2)有名命名实例:实列名为benet,在服务中的名称是MSSQL$BENET。
注:如果你有多个实例的时候会在服务中出现多个服务名称。
2、连接到查询分析器或探查器的时候区别:
(1)默认实例可以使用:“.”(点)、“(local)”、“计算机名称”。
(2)实例名称:计算机名pcname,实例名benet,连接时使用的名称是pcname\benet。

(三)安全对象和权限

安全对象(Securable),可以通过权限得到保护的实体。是SQLServer数据库引擎授权系统控制对其进行访问的资源。如表、视图、触发器等。
SQLServer中将安全对象分为三个层次,分别为:
⊙服务器层级,包含的安全对象:端点、登录、服务器角色、数据库。
⊙数据库层级,包含的安全对象:用户、数据库角色、应用程序角色、程序集、消息类型、路由、服务、远程服务绑定、全文目录、证书、非对称密钥、对称密钥、约定、架构。
⊙构架(SCHEMA)层级,包含的安全对象:类型、XML架构集合、对象(函数、过程、同义词、表、视图)
这三个层级是从上到下包含的,级别从高到低。

说明:端点(endpoint)为服务器级安全对象。Microsoft SQL Server 2005 中的连接管理基于“端点”。一个端点就是一个SQL Server对象,它能够使 SQL Server在网络中通信。对于数据库镜像,服务器实例需要有自己专用的“数据库镜像端点”。此端点用途特殊,专门用于接收来自其他服务器实例的数据库镜像连接。

权限 (permission),与对象关联的规则,用来规定哪些用户可以获得该对象的访问权限以及方式如何。对安全对象的访问通过授予或拒绝权限进行控制。
权限可以明确用户能够使用哪些数据库对象,并对它们进行何种操作。用户在数据库内的权限取决于用户账号的权限和该用户所属的角色的权限。
提示:在设置权限时,尤其要注意权限在安全对象上的继承关系。对于高级别安全对象上设置的权限,会被自动继承到低级别安全对象上。
理解权限的继承和权限的覆盖会在设置权限时减少很多问题,最佳方法是统筹规划,上机验证。

(四)架构(schema)
架构是指包含表、视图、过程等的容器。它位于数据库内部,而数据库位于服务器内部。这些实体就像嵌套框放置在一起。服务器是最外面的框,而架构是最里面的框。架构包含表、视图、过程、函数、同义词、类型、队列、XML架构集合等安全对象。

注意:
在 SQL Server 2000和早期版本中,数据库可以包含一个名为“架构”的实体, SQL Server 2000包含 CREATE SCHEMA语句,但此实体实际上是所有者(创建对象时的用户)。在 SQL Server 2005 开始,架构既是一个容器,又是一个命名空间。任何用户都可以拥有架构,并且架构所有权可以转移。从 SQL Server 2005开始,每个用户都拥有一个默认架构。可以使用 CREATE USER或 ALTER USER的 DEFAULT_SCHEMA选项设置和更改默认架构。如果未定义 DEFAULT_SCHEMA,则数据库用户将使用 dbo作为默认架构。

在SQL Server 2000中,DataBaseName.dbo.TableName解释为:数据库名.所有者.表名。
从 SQL Server 2005开始,DataBaseName.dbo.TableName解释为:数据库名.架构名.表名。

在SQL Server 2000中,数据库对象全称是server_name.[database_name].[owner_name].object_name
从SQL Server 2005始,数据库对象全称是server_name.[database_name].[schema_name].object_name
在SQL SERVER2000或以前版本中创建一个对象,对象必须要有一个所有者(owner)。对象是如何属于某个所有者的呢?这依赖于创建对象时的用户。您不能取消对象所有者(object owner)的特权(privileges)。对象所有者可以执行任何与对象有关的操作(例如 INSERT、UPDATE、DELETE、SELECT或 EXECUTE),也可以管理对象的权限。
从2005/2008后,一个我们必须重新认识的情况是对象不再有所有者(owner)。架构包含对象,架构有所有者。

在2005前(如SQL Server 2000中),没有架构的概念,只有用户的概念,那时候DBO是默认用户。到了2005,有了架构概念,但是为了向后兼容,保留了DBO,并且把DBO作为默认架构,在不指定架构的情况下,默认为dbo,“默认架构”的概念,用于解析未使用其完全限定名称引用的对象的名称。在 SQL Server 2005 中,每个用户都有一个默认架构,用于指定服务器在解析对象的名称时将要搜索的第一个架构。可以使用 CREATE USER和 ALTER USER的 DEFAULT_SCHEMA选项设置和更改默认架构。如果未定义 DEFAULT_SCHEMA,则数据库用户将把 DBO作为其默认架构。

(五)dbo
dbo既是默认架构,也是默认用户。在SQL Server 2000中,dbo作为默认用户。在SQL Server2005中,dbo既作为默认用户,也作为默认架构(如图)。

dbo作为默认用户,dbo (DataBase Owner,数据库的所有者,拥有数据库中的所有对象),每个数据库都有dbo, sysadmin服务器角色的成员自动映射成dbo,无法删除 dbo用户,且此用户始终出现在每个数据库中。通常,登录名sa映射为库中的用户dbo。另外,固定服务器角色 sysadmin的任何成员都映射到每个数据库内称为 dbo的一个特殊用户上。由固定服务器角色sysadmin的任何成员创建的任何对象都自动属于 dbo。由固定服务器角色 sysadmin的任何成员或 dbo用户创建的任何对象都自动属于dbo,由任何其他用户(包括 db_owner固定数据库角色成员)创建的对象,属于创建该对象的用户,而不是 dbo,用创建该对象的用户名限定。例如:
如果用户 Andrew是固定服务器角色sysadmin的成员,并创建表 T1,则表 T1属于 dbo,并以 dbo.T1而不是 Andrew.T1进行限定。相反,如果 Andrew不是固定服务器角色sysadmin的成员,而只是固定数据库角色 db_owner的成员,并创建表 T1,则 T1属于 Andrew,并限定为Andrew.T1。该表属于 Andrew,因为该成员没有将表限定为dbo.T1。

dbo作为默认架构,在不指定架构的情况下,默认为dbo,“默认架构”的概念,用于解析未使用其完全限定名称引用的对象的名称。在 SQL Server 2005 中,每个用户都有一个默认架构,用于指定服务器在解析对象的名称时将要搜索的第一个架构。可以使用 CREATE USER和 ALTER USER的 DEFAULT_SCHEMA选项设置和更改默认架构。如果未定义 DEFAULT_SCHEMA,则数据库用户将把 DBO作为其默认架构。

(六)Guest用户
guest用户不需要映射到登录名。这种用户账号是供数据库中没有明确授予权限给已映射至认证用户使用的。guest供那些已经成功登录到SQL SERVER实例,但是却没有通过用户访问数据库的权限的登录者使用的。

SQLSERVER 2000中guest用户可以删除;而2005/2008中是不能删除的,却可以取消CONNECT权限,而且为安全起见,所有用户定义的数据库中缺省情况下guest用户的权限都是被取消了的,可在除master和tempdb之外的任何数据库中禁用Guest用户。
在SQL SERVER 2000中,新建的数据库中没有Guest用户,但可以添加它,也可删除它,添加与删除方法与普通数据库相同。
在SQL Server 2005或以上版本中GUEST已经默认存在于每个数据库中,但默认情况下,会在新数据库中禁用GUEST用户(在“对象资源管理器→安全性→登录”节点中图标上有禁用标识),我们可以通过以下语句启用GUEST用户:GRANT CONNECT TO GUEST 。当你决定不再想让该数据库被非数据库授权的用户以GUEST身份进行访问时,可以再次将GUEST帐号禁用。值得一提的是,GUEST用户在数据库中不能被删除,我们只能通过以下语句禁用GUEST用户:REVOKE CONNECT FROMGUEST 。

在SQL SERVER 2000中,要允许guest用户帐户访问数据库,可以像添加其它数据库用户那样添加它,如:
USE<Database Name>
GO
EXECsp_grantdbaccess 'guest'
GO

在SQL SERVER 2005中,允许guest用户帐户
USE<Database Name>
GO
GRANT CONNECT TO GUEST
GO

需要提醒的是,对于是否添加Guest用户要谨慎权衡利弊。

--SQLServer 2000删除guest用户账号
USE<Database Name>
GO
EXECsp_revokedbaccess 'guest'
GO

-- SQLServer 2005禁用guest用户账号
USE<Database Name>
GO
REVOKECONNECT FROM GUEST
GO

(七)sa登录名
SQLServer的 sa登录名是服务器级的主体。默认情况下,该登录名是在安装实例时创建的。在 SQL Server 2005和 SQL Server2008中,sa的默认数据库为 master。这是对早期版本的 SQLServer的行为的更改。

sa(system administrator系统管理员)是为向后兼容而提供的特殊登录。sysadmin是一种角色。该角色能够执行SQLServer上的任何操作。本质上,任何具有这种角色成员身份的人都是那个服务器上的sa。这种服务器角色的创建为微软提供了某一天去除sa登录的能力——实际上,联机丛书把sa称作本质上为遗留物的东西。

与以前版本不同,SQL Server 2008,即使是用混合模式安装,sa也默认禁用。
注意,sa是一个默认的SQL Server登录名,拥有操作SQL Server系统的所有权限,该登录名不能被删除。当采用混合模式安装Microsoft SQL Server系统之后,应该为sa指定一个密码,应为 sa登录分配一个强密码(strongpassword)。

sa登录名会映射到 sysadmin固定服务器角色,它对整个服务器有不能撤销的管理凭据。如果攻击者以系统管理员的身份获取了访问权限,则可能造成的危害是无法预计的。

(八)其它几个默认配置的的登录(Logins)和用户(Users)
默认配置的的登录和用户除了dbo用户、Guest用户、sa登录,还有如下几个:

Administrators组是一个特殊的登录。administrator用户默认administrators组的成员。
Administrators组实际名称为BUILTIN\Administrators。早期版本,这个组的所有成员均为 sysadmin 角色的成员(这意味着Administrators组中的成员具有最高权限),但可以从该角色中移除这些成员。与以前版本不同,SQL Server 2008默认情况下,本地 Windows组 BUILTIN\Administrators不再包含在新的 SQL Server 2008安装上的 SQL Server的 sysadmin固定服务器角色中。

提示:每个版本的 SQL Server都具有不同的安全功能,默认配置也不尽相同,后出的版本更有利于安全,但安全性和使用方便这两种需求可能有矛盾的一面,最佳方法是上机了解验证。

NETWORKSERVICE和SYSTEM登录账户
NETWORKSERVICE和SYSTEM登录账户,实际名称为NT AUTHORITY\NETWORK SERVICE和NT AUTHORITY\SYSTEM,是否存在这些,依赖于服务器的配置。如果配置了报表服务器,将出现NETWORK SERVICE登录账户。

INFORMATION_SCHEMA和sys用户
INFORMATION_SCHEMA和sys又是SQL Server 预定义的架构(内置架构)名称,它们与INFORMATION_SCHEMA和sys用户具有相同的名称。不能删除,主要用于向后兼容性。可以使用INFORMATION_SCHEMA用户和sys用户访问INFORMATION_SCHEMA和sys架构的系统视图,获取有关数据库元数据信息。

(九)SQL Server中的角色
角色 (role),是SQL Server用来管理服务器和数据库权限的,是安全帐户的集合,在管理权限时可以视为一个单元——作为分配权限的单位。
SQLServer中的角色分为服务器级别和数据库级别角色。

◇服务器级别角色
服务器级别角色用于帮助管理服务器上的权限。服务器角色的权限作用域为服务器范围。可以将登录名(Login Name)添加到服务器角色。

符合权限要求的用户,可以将服务器级主体(SQL Server登录名、Windows帐户和 Windows组)添加到服务器级角色。固定服务器角色的每个成员都可以将其他登录名添加到该同一角色。

固定服务器角色简介:
1)sysadmin:系统管理员,角色成员可对SQLServer服务器进行所有的管理工作,为最高管理角色。这个角色一般适合于数据库管理员(DBA)。
2)securityadmin:安全管理员,角色成员可以管理登录名及其属性。可以授予、拒绝、撤销服务器级和数据库级的权限。另外还可以重置SQL Server登录名的密码。
3)serveradmin:服务器管理员,角色成员具有对服务器进行设置及关闭服务器的权限。
4)setupadmin:设置管理员,角色成员可以添加和删除链接服务器,并执行某些系统存储过程。
5)processadmin:进程管理员,角色成员可以终止SQLServer实例中运行的进程。
6)diskadmin:用于管理磁盘文件。
7)dbcreator:数据库创建者,角色成员可以创建、更改、删除或还原任何数据库。
8)bulkadmin:可执行BULK INSERT语句,但是这些成员对要插入数据的表必须有INSERT权限。BULK INSERT语句的功能是以用户指定的格式复制一个数据文件至数据库表或视图。
9)在sql server 2005 sp2(补丁)及以后版本,服务器角色中还可以看到一个public角色。每个 SQL Server登录名均属于 public服务器角色。 如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,该用户将继承授予该对象的 public角色的权限。public服务器角色默认拥有 VIEW ANY DATABASE(查看任何数据库)权限。[VIEW ANY DATABASE权限控制是否显示sys.databases和 sys.sysdatabases视图以及 sp_helpdb系统存储过程中的元数据(metadata)。]

从 SQL Server 2012开始,您可以创建用户定义的服务器角色,并将服务器级权限添加到用户定义的服务器角色。
每个版本的 SQL Server都具有不同的安全功能,版本越高,功能越强。

可以利用系统函数IS_SRVROLEMEMBER指示当前用户的 SQLServer登录名是否是固定服务器角色的成员。
可以利用系统存储过程sp_helpsrvrolemember返回有关 SQL Server 固定服务器角色成员的信息。
--查询 sysadmin固定服务器角色的成员。
execsp_helpsrvrolemember 'sysadmin'

◇数据库级别的角色
数据库级别角色用于帮助管理数据库中的权限。数据库级角色的权限作用域为数据库范围。可以将[数据库]用户名(User Name)添加到数据库角色。
SQLServer中有两种类型的数据库级角色:数据库中预定义的“固定数据库角色”和您可以创建的“灵活数据库角色”(自定义数据库角色)。

固定数据库角色是在数据库级别定义的,并且存在于每个数据库中。 db_owner和db_securityadmin数据库角色的成员可以管理固定数据库角色成员身份。但是,只有db_owner数据库角色的成员能够向db_owner固定数据库角色中添加成员。 msdb数据库中还有一些特殊用途的固定数据库角色。

符合权限要求的用户,可以向数据库级角色中添加数据库帐户和其他 SQL Server角色。固定数据库角色的每个成员都可向同一个角色添加其他登录名。

固定数据库角色简介:
1)db_owner:数据库所有者,这个数据库角色的成员可执行数据库的所有管理操作。
2)db_accessadmin:数据库访问权限管理者,角色成员具有添加、删除数据库使用者、数据库角色和组的权限。
3)db_securityadmin:数据库安全管理员,角色成员可管理数据库中的权限,如设置数据库表的增加、删除、修改和查询等存取权限。
4)db_ddladmin:数据库DDL管理员,角色成员可增加、修改或删除数据库中的对象。
5)db_backupoperator:数据库备份操作员,角色成员具有执行数据库备份的权限。
6)db_datareader:数据库数据读取者,角色成员可以从所有用户表中读取数据。
7)db_datawriter:数据库数据写入者,角色成员具有对所有用户表进行增加、删除、修改的权限。
8)db_denydatareader:数据库拒绝数据读取者,角色成员不能读取数据库中任何表的内容。
9)db_denydatawriter:数据库拒绝数据写入者,角色成员不能对任何表进行增加、删修、修改操作。
10)public:是一个特殊的数据库角色,每个数据库用户都是public角色的成员,因此不能将用户、组或角色指派为public角色的成员,也不能删除public角色的成员。public数据库角色默认的权限很少[使用某些系统过程查看并显示master数据库中的信息;执行一些不需要一些权限的语句(例如PRINT)]。

可以利用系统函数IS_MEMBER检查当前用户是否是数据库角色或Windows域组的成员。
可以利用系统存储过程sp_helprolemember显示数据库角色的成员。
可以利用系统存储过程sp_helpuser报告有关当前数据库中数据库级主体的信息。
可以利用系统存储过程sp_helprotect报告当前数据库中某对象的用户权限或语句权限的信息。

--查询用户拥有的数据库角色
useyourdb
execsp_helpuser 'UserName'
go
--查询用户被赋予的权限
useyourdb
execsp_helprotect @username = 'user name'

热点内容
php的redis手册 发布:2024-05-01 09:54:26 浏览:173
永生之物安卓用什么模拟器 发布:2024-05-01 09:48:51 浏览:620
php多维数组排序 发布:2024-05-01 09:48:51 浏览:460
java开发微信平台开发 发布:2024-05-01 09:47:54 浏览:820
是直接存取的存储设备 发布:2024-05-01 09:41:45 浏览:558
8上传统书 发布:2024-05-01 09:41:42 浏览:926
php判断小数 发布:2024-05-01 09:30:41 浏览:331
怎么访问ad服务器 发布:2024-05-01 09:30:35 浏览:983
小空调看什么配置 发布:2024-05-01 09:25:22 浏览:550
手机最强解压 发布:2024-05-01 09:08:26 浏览:519