楼主: ccwlm741212

[精华] Ms SQL常见问题收集整理集(不断收集中...)

[复制链接]
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
101#
 楼主| 发表于 2003-12-23 23:00 | 只看该作者
转贴一份 双机热备的资料 供参考

ftp://ftp.rational.com/public/rose/....00.271.000.zip
双机热备份安装文档
(Ver 1.1 2002.11.26)
下面的文档以IBM Netfinity 7600/xSeries 250为例!
说明如何安装SQL 群集
本方案我已经在4家医院使用,是本人在总结了多次经验教训后写出来的

1. 从IBM下载,具体的地址参阅IBM手册。Server Raid Firmware软件,升级BIOS,具体升级方法参考IBM升级文档
2. 制作驱动程序
在其它的机器中,插入Server Guide x.x.x System Upates And Applications光盘,next->next->选择IBM Netfinity 7600/xSeries 250 System Diskettes ->next->选择Advanced System Management Device Driver Dsikette 和IBM ActivePCI Software for Microsoft windows 2000->Next->Next->插入空的软盘,系统开始自动制作驱动程序盘,共2张。
插入ServerRaid x.xx Support CD,将光盘中Diskettes/tools/disk4w32.exe和Images/dd.img 文件拷贝到硬盘中,然后运行 dsk4w32 dd.img a: 将文件释放到一张新的软盘中。
3. 在nt1,nt2上安装win2000 , 切记必须去掉IIS,和群集服务
设置IP地址
NT1:网卡1:IP 192.168.0.2,mask:255.255.255.0,Dns1:192.168.0.2,Dns2:192.168.0.3
网卡2: IP 10.0.1.1 ,mask: 255.0.0.0, Dns1:10.0.1.1,Dns2:10.0.1.2
Nt2:网卡1:IP 192.168.0.3,mask:255.255.255.0,Dns1:192.168.0.3,Dns2:192.168.0.2
网卡2:IP 10.0.1.2 mask:255.0.0.0 Dns1:10.0.1.2,Dns2:10.0.1.1
安装后需要安装必要的驱动程序
右击我得电脑->属性->硬件->设备管理器->可以看到2个未知的设备,先卸栽第一个未知设备,然后右击计算机名,选择扫描硬件驱动,插入制作好的Advanced System Managerment软盘,安装驱动
然后卸栽第二个未知设备,同样的方法扫描驱动,然后插入Active PCI Device软盘
安装后,必须重新启动计算机
最后卸栽第三个未知设备,同样地方法扫描驱动,然后插入 ServeRaid 驱动软盘或光盘
注意:如果硬盘上有东西,必须将所有的分区全部删除,然后必须重新启动!!!
4. 重新启动 NT2 并放入SeveRaid 光盘
系统会首先升级Bios 和 Firmware ,升级后重新启动,然后自动进入ServeRaid Manager
在controller1,在Arrays 右击选择Create Arrays->Express Configuration for controller1->Next->选择Raid level 为1,(不要使用1E或5) 具体的选择和磁盘的数量有关,注意不可以选择Raid Levl 5,一般2个为1,多于2个用1+0,以4个为例,首先将2个磁盘设为1个组,做成Raid0,然后再将另外两个磁盘设为1个组,也做成Raid0,最后将这个磁盘做成Raid1
重新启动后
右击Controller1->选择Clustering Actions-Configure for Clustering,改Controller name=Node2,Partnet name=Node1,channel1=6

右击controller1->选change strip-unit size 为16KB->选择YES
单击窗口右上方的差号,选择Reboot
重新启动后,取出光盘,关闭NT2

3. 打开NT1,插入ServeRaid 光盘
注意此时系统会出现很多的信息,不能自动启动,这是因为磁盘阵列的控制权在Nt2上,按F5,系统自动更新Raid卡的BIOS,然后进入ServeRaid Manager

右击controller1选择Restore to factory default Settings,在Arrays 右击选择Create Arrays->Express Configuration for controller1->Next->选择Raid level 为1,具体的选择和磁盘的数量有关,

重新启动后
右击Controller1->选择Clustering Actions-Configure for Clustering,改Controller name=Node1,Partnet name=Node2, channel1=7

右击controller1->选change strip-unit size 为16KB->选择YES
单击窗口右上方的差号,选择Reboot
重新启动后,取出光盘

4. 安装最新的ServicePack,你必须安装最新的更新软件,以防止病毒的发生
5. 修改目录方式
Nt1
开始->程序->管理工具->配置服务器->Active Directory->向下移动点击启动->选新域的域控制器->创建一个新的域目录树,创建新的域目录林继续安装->Dns全名为医院的简写,如ZZX ->是->域的NetBios名为ZZX->以下的操作全部选择默认
安装后,系统必须重新启动
在NT1启动后
重新启动NT2
开始->程序->管理工具->配置服务器->Active Directory->向下移动点击启动->选择现有域的额外域控制器->输入用户名administrator和密码没有,域名填写Nt1的域名如ZZX->Next ->单击浏览选择ZZX,下一步->其它的操作全部按照默认设置
重新启动计算机

6. 安装ServeRaid管理程序
首先安装NT1
放入ServeRaid光盘,按照向导安装ServeRaid Manager程序,安装后,将光盘中programs\winnt\cluster目录中的所有文件,拷贝到 C:\cluster目录中,备用
Nt2
放入ServeRaid光盘,按照向导安装ServeRaid Manager程序,安装后,将光盘中programs\winnt\cluster目录中的所有文件,拷贝到 C:\cluster目录中,备用


7. 打开NT1,插入ServeRaid 光盘
注意此时系统会出现很多的信息,不能自动启动,这是因为磁盘阵列的控制权在Nt2上,按F5,系统自动更新Raid卡的BIOS,然后进入ServeRaid Manage
右击Controller1->选择Clustering Actions-Configure for Clustering,
merge group information中logical drive1为shared, Merge group=1,点击OK
重新启动计算机

8. 安装磁盘阵列,写入签名
首先在NT1上
右击我的电脑->管理->磁盘管理,计算机会自动显示,将签名写入磁盘1->当出现选择要升级的磁盘时,将磁盘1前的勾去掉->下一步->完成
这是,磁盘1已经作为基本磁盘出现,绝对不能作为动态磁盘出现,如果是需要转换为基本磁盘
右击磁盘1,选择创建分区->下一步->主磁盘分区->下一步->下一步->选择指定驱动器号为S: ,格式化为NTFS分区->完成
关闭我的电脑
然后将S:的卷标改为share
在Nt2上写入签名
在NT2上运行c:\cluster\support\Ipshahto.exe,右击我的电脑选择管理->磁盘管理,可以看到基本磁盘share盘,并且盘符为E:,单击磁盘E: 右击选择更改驱动器名和路径,指派驱动器号为S:,确定即可
关闭我的电脑
11. 创建群集管理员帐户
该帐户建立方法是:开始->程序->管理工具->Active Directory 用户计算机->点击users,,右击选择新建-用户,用户登录名为clusterAdmin,姓cluster,名为admin,下一步->输入密码->选择密码永不过期,用户不能更改密码->完成
然后选择刚刚建立的clusterAdmin,右击选择属性->在描述中输入,一些警告信息->单击成员属于,添加所有的组->应用,确定即可
12. 安装群集软件
首先安装Nt1
在Nt1上,运行c:\cluster\support\ipshahto.exe
等待几分钟
然后插入2000光盘,在添加和删除组件中,选择群集服务,系统开始安装群集软件,系统拷贝数据后,当系统询问是否继续安装的时候,点击取消。

然后运行 c:\cluster\setup.exe
当出现添加或删除 windows 2000组件时,选择群集服务->按照向导安装->单击我理解->下一步->然后选择群集中的第一个节点->群集的名称为Nt,如果原服务器的名为Nt,请改为其它的名称->下一步->输入群集服务使用的域帐户为clusteradmin,密码->下一步->当计算机出现网络连接时

按下面配置
3com 网卡(另外添加的100M网卡),选择只用于混合群集通讯,IBM网卡选择只用于群集通讯,选择是,在群集IP地址中IP输入虚拟服务器server的IP地址为192.168.0.4,子网:255.255.255.0
网络为本地连接,就是IBM网卡使用的连接,完成,按向导操作

当出现IBM ServeRaid Cluster Configuration wizard->下一步->选择IPSHA DISK S:->下一步->完成->finish

安装NT2

插入2000光盘,在添加和删除组件中,选择群集服务,系统开始安装群集软件,系统拷贝数据后,当系统询问是否继续安装的时候,点击取消。

在Nt2中运行c:\cluster\setup.exe ->选择群集服务->下一步->下一步->硬件配置窗口中,选择第二个或下一个节点->下一步->在创建或加入群集中选群集中,选择用下面帐户连接到群集,用户名为clusteradmin ,输入密码->下一步->确定,输入密码->下一步->完成->确定->系统重新出现IBM SeveRaid Cluster Configuration Wizard->下一步->完成->Finish

13. 在Nt2上 ,安装Dns服务
在添加和删除程序中,选择DNS服务,安装

至此,群集服务已经安装完毕
测试方法
两台机器:开始->程序->管理工具->群集管理器
组-单击 IP SHA GROUP,在右边的列表中查看 IPSHA DISK S: 的所有着是NT1还是NT2,应该为Nt1
直接关闭NT1,等几分钟,看一下,IP SHA DISK S:的资源是否自动变为NT2

同时在站机中
开始->运行-> ping server –t 可以看到开始值 192.168.1.4 有响应,在关闭Nt1计算机后,出现无响应,然后重新有响应

恭喜:群集已经安装成功了,如果不能自动切换,所有的步骤都必须重新来过!更新 BIOS除外。

14. 备份设置
重新开启Nt1
右击我的电脑->管理->磁盘管理器->创建将磁盘0的其它部分做成一个扩展分区,然后创建2个分区,一个2048M的Fat32分区,盘符为F: 其它全部作为一个NTFS分区
在Nt2上做同样的操作

然后用软盘启动NT1和NT2
用ghost备份分区的内容到 F: 盘中。
14.安装SQL 2000 企业版
放入光盘->选择安装服务器->选择虚拟服务器,名称为NT,或原服务器的名称,输入序列号,在故障转移集群中输入虚拟IP地址192.168.0.1,子网255.255.255.0,在出现请选择用来防治数据文件的群集磁盘中选择IPSHA DISK S:下的S:,系统会出现警告,选择是->下一步,输入群集管理员的用户名(clusteradmin)和密码,用户名,域->下一步->安装类型选择典型->下一步->在服务帐户中,选择对每个服务使用同一帐户,在服务设置中,用户名为clusteradmin ,输入密码,选择身份验证模式中选混合模式,根据需要输入Sa 的密码
注意:必须严格按照步骤进行,一步也不能错,否则只有重新安装!

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
102#
 楼主| 发表于 2003-12-23 23:00 | 只看该作者
使你的SQL SERVER 2000更安全
(转贴)

为了保护你服务器上的信息并抵抗蠕虫病毒,请看Finding and Fixing Slammer Vulnerabilities页面。
现在你可以通过10种方法去提高你的SQL SERVER的安全性:
1、安装最新版本的SERVICE PACK。
一种既简单又高效的方法是把SQL SERVER升级到SQL SERVER2000 SERVICE PACK3(SP3)。要下载SP3,可以点击以下连接:
你也可以安装所有他们发布的安全补丁,如果想通过E-MAIL得到他们最新补丁的发布资料,可以点击以下连接:Product Security Notification page
2、用微软的安全基准分析器(MBSA)来评估你的服务器的安全性。
MBSA是一个用来扫描微软产品中包含的不安全设置的工具,包括了SQL SERVER和SQL SERVER2000桌面引擎(MSDE 2000)。它可以在本地机上运行或者通过网络运行。它能够测试出SQL SERVER中的问题,就如:
*太多的SYSADMIN成员被确定成服务角色
*除了SYSADMIN还创建和赋予可执行作业的权限给其他角色
*空或弱口令
*过多的权限赋给了管理员组
*在SQL SERVER 的数据字典中存在不正确的访问控制列表(ACLs)
*在安装文件中SA口令是明文
*过多的权限赋给了客人帐号(GUEST)
*SQL SERVER运行在一个域控制服务器上
*如果访问某些注册键时,对每一组人的配置不正确
*不恰当的SQL SERVER服务帐号配置
*缺少服务包和安全升级
微软发布MBSA提供免费下载。
3、使用WINDOWS系统认证模式
无论如何,你应该需要使用WINDOWS系统认证模式来连接到SQL SERVER。他们会保护你的SQL SERVER防止一些受限的WIDOWS用户或域用户基于互联网的攻击。你的服务器也会受益于WINDOWS强制安全机制,如更加强壮的证明协议和强制性的口令复杂性。而且,信任委托(有跨越多个服务器的信任能力)只是在WIDOWS认证模式下可用。在客户端,WINDOWS认证模式消除了口令保存,在使用标准的SQL SERVER登录时口令保存是一个非常大的弱点。
对于在SQL SERVER安装带有企业管理模块WINDOWS认证模式安全:
1) 展开一个服务组
2) 右键这个服务,然后点击属性
3) 在“Security”标签上,在“Authentication”下,点击“WINDOWS ONLY”
对于更多的信息,参看帮助。
4、有计划的隔离你的服务器进行备份
逻辑和物理上的隔离来虚构一个根本安全的SQL SERVER。有数据库的主机将防止在一个物被理保护的地方,理想的环境是有各种监控系统的机房。数据库应该放置在你们公司内部网并不和互联网直接相连安全的区域。有计划的备份所有的数据并保存备份在本地以外的安全区域。更详细的产品备份指南请参考SQL SERVER 2000操作指南。
5、分配一个强壮的SA口令
即使是把服务器配成WIDOWS认证模式,这SA帐号也必须有一个强壮的口令。这将不会把一个空或弱口令暴露在将来,当服务器配置成了混合认证模式。
对于分配SA的口令:
1) 展开一个服务器组,然后展开一个服务器。
2) 展开“Security”,然后点击“Logins”。
3) 在详细框中,右键SA,然后点击“Properties”。
4) 在“Password”栏中,键入新的口令。
更多的信息,参看“System Administrator (sa) Login”主题的帮助。
6、限制SQL SERVER特权级别服务
SQL SERVER 2000 和SQL SERVER代理像WINDOWS 系统的服务一样运行。每个服务必须被授予一个得到了安全内容的WINDOWS系统帐号。SQL SERVER 允许SA用户登录,和一些案例的其他可以访问操作系统特征的用户。这些操作系统调用被用来处理服务进程自己的安全访问。如果服务器被“黑”,操作系统调用可能被用于延伸到自己拥有的过程等其他资源被访问的攻击。基于这个问题,SQL SERVER 服务主要赋予他必要的特权就可以了。
推荐以下的设置:
*SQL SERVER 引擎/MSSQL 服务
如果有被命名的实例,它们被命名成MSSQL$实例名。作为一个WINDOWS域用户帐号所带有的常规用户权限运行。不能作为一个本地的系统管理员,或域管理员帐号运行。
*SQL SERVER 代理服务/SQL SERVER 代理
如果在你的环境中不许要就关掉以上服务;或者作为一个WINDOWS域用户帐号所带有的常规用户权限运行以上服务。不能作为一个本地的系统管理员,或域管理员帐号运行。
重要:如果是以下的有一个条件为真,SQL SERVER 代理回需要本地WINDOWS 管理员权限:
SQL SERVER 代理连接到正在使用标准的SQL SERVER认证的SQL SERVER(不推荐)。
SQL SERVER 代理使用了一个多服务器中连接使用标准SQL SERVER认证的主服务器帐号。
SQL SERVER 代理运行微软的ACTIVEX 脚本或通过没有SYSADMIN服务角色绑定的用户运行批处理工作。
如果你需要改变关联了一个SQL SERVER 服务的帐号,使用 SQL SERVER 企业管理工具。企业管理工具可以允许适当设置SQL SERVER使用的文件和注册表。没有使用过这微软管理控制台服务JAVA 程序去改变这些帐号,是因为这需要许多的注册手工校对、NTFS 文件系统许可和微软WINDOWS 用户的权限。
更多的信息请参看SQL SERVER 参考书。
改变帐号信息将会在下一次启动后生效。如果你需要改变关联了SQL SERVER 和SQL SERVER 代理的帐号,你必须两种服务分别的使用企业管理工具来修改。
7、在防火墙上禁止SQL SERVER端口
默认安装SQL SERVER 监控TCP端口 1433 和UDP端口1434。配置你的防火墙去过滤针对这些端口的外来数据包。关联被命名实例的额外端口也将被防火墙隔离。
8、使用更安全的文件系统
在安装SQL SERVER时NTFS是首选的文件系统。这比FAT文件系统更稳定和易于恢复,使之有文件和目录访问控制和文件加密的安全选项。在安装的过程中,如果检测到是NTFS文件系统SQL SERVER将在注册主键和文件中适当的设置访问控制列表,这中设置是不能改变的。
通过文件加密,在同一个帐号下运行的SQL SERVER数据库文件被加密,只有这个帐号才能解开文件。如果你需要改变运行SQL SERVER 的帐号,你必须在旧的帐号下解密那些数据文件,然后在新的帐号下再加密。
9、删除或保护旧的安装文件
SQL SERVER 安装文件可能包含明文或弱加密信任状、在安装时的日志等其他敏感的配置信息。这些日志文件位置的变更显示了已安装的SQL SERVER版本。在 SQL SERVER 2000,以下的文件可能受到攻击:sqlstp.log,sqlsp.log,和setup.iss 在:\Program Files\Microsoft SQL Server\MSSQL\Install目录中的默认安装信息,和:\Program Files\Microsoft SQL Server\ MSSQL$\Install 目录中被命名的实例。
如果当前系统是一个从SQL SERVER 7.0版本升级的安装,以下文件你要好好检查:setup.iss 在 %Windir% 目录,和sqlsp.log 在WINDOWS 系统的临时目录。
微软发布一些免费的工具,查找和删除你系统中的口令文件。更多的信息请参考微软网站。
10、审计SQL SERVER 的连接
SQL SERVER 能以日志的形式记录事件信息并可以给系统管理员查看。在最小化时,你可以把尝试连接到SQL SERVER的失败连接记录下来和时常的查看日志。当有可能,保存这些日志到一个不同与数据文件存放的硬盘。
在SQL SERVER中使用企业管理工具错误连接的审计:
1)展开一个服务组。
2)右键点击一个服务器,然后点击“属性”。
3)在“安全”选框上,在“审计级别”下点击“失败”。
你必须停止和从新启动服务这个设置才会生效。
更多的信息请查看SQL SERVER 帮助。

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
103#
 楼主| 发表于 2003-12-23 23:01 | 只看该作者
[tip][转贴]SQL Server性能分析参数
---摘自《SQL编程技巧站》
当您怀疑计算机硬件是影响SQL Server运行性能的主要原因时,可以通过SQL Se
rver Performance Monitor监视相应硬件的负载,以便证实您的猜测并找出系统
瓶颈。下文将介绍一些常用的分析对象及其参数。

Memory: Page Faults / sec
如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶
颈。

Process: Working Set
SQL Server的该参数应该非常接近分配给SQL Server的内存值。在SQL Server设
定中,如果将"set working set size"置为0, 则Windows NT会决定SQL Server的
工作集的大小。如果将"set working set size"置为1,则强制工作集大小为SQL
Server的分配内存大小。一般情况下,最好不要改变"set working set size"的
缺省值。

Process:%Processor Time
如果该参数值持续超过95%,表明瓶颈是CPU。可以考虑增加一个处理器或换一个
更快的处理器。

Processor:%Privileged Time
如果该参数值和"Physical Disk"参数值一直很高,表明I/O有问题。可考虑更换
更快的硬盘系统。另外设置Tempdb in RAM,减低"max async IO","max lazy w
riter IO"等措施都会降低该值。

Processor:%User Time
表示耗费CPU的数据库操作,如排序,执行aggregate functions等。如果该值很
高,可考虑增加索引,尽量使用简单的表联接,水平分割大表格等方法来降低该
值。

Physical Disk:Avg.Disk Queue Length
该值应不超过磁盘数的1.5~2倍。要提高性能,可增加磁盘。
注意:一个Raid Disk实际有多个磁盘。

SQLServer:Cache Hit Ratio
该值越高越好。如果持续低于80%,应考虑增加内存。 注意该参数值是从SQL Se
rver启动后,就一直累加记数,所以运行经过一段时间后,该值将不能反映系统
当前值

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
104#
 楼主| 发表于 2003-12-23 23:02 | 只看该作者
tip][转贴]配置SQL Server 2000选项
SQL Server服务器的配置选项属于那种人们了解较少且经常误用的选项。当一个技术支持人员要求你按照某种方式调整一个选项、而另一个技术支持人员却要求你按照另一种完全对立的方式调整同一个选项时,你可能对这些选项的真正含义感到困惑。有关这些选项的资料很缺乏,至少可以说不够详细和清楚。在SQL Server 2000中,Microsoft减少了几个配置选项,让SQL Server动态配置它们,从而减少了几个容易混淆的地方。同时,Microsoft又为SQL Server 2000新增了两个服务器配置选项,调整了一些数据库选项,从而稍许简化了数据库管理员的工作。

新增的服务器选项
就象访问大多数企业版服务器的属性一样,我们不能在SQL Server Enterprise Manager中通过服务器属性窗口访问SQL Server 2000新增的两个服务器选项。作为防止用户由于不小心而错误配置服务器的一个安全措施,Microsoft没有把这些高级配置选项放入Enterprise Manager。相反,我们必须使用T-SQL/sp_configure系统存储过程去访问这些高级选项。我们可以用不带参数运行sp_configure的方法查看服务器的当前配置。在执行结果中,config_value是SQL Server从Master数据库syscurconfigs表提取出来的数据,它显示了服务器的当前配置;run_value列显示了执行sp_configure时SQL Server正在使用的选项,SQL Server在sysconfigures表中存储这些数据。修改某个选项之后,我们必须执行RECONFIGURE命令(在大多数情况下,还要重新启动SQL Server)才能让新的run_value显示出来。本文所讨论的所有选项都要求重新启动SQL Server。

服务器选项总共有36个,默认情况下,sp_configure存储过程只显示其中的10个,显示结果中不包含高级选项,而且所有新的SQL Server配置选项都不会出现在这个精简的清单中。然而,我们可以使用show advanced options命令参数让SQL Server显示出所有选项。要启用show advanced options,我们使用如下命令格式:

EXEC sp_configure 'show advanced options', '1' RECONFIGURE

要安装一个选项,我们必须在使用sp_configure配置服务器之后运行RECONFIGURE命令。上面命令的输出结果如下:

Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE command to install.

一旦能够查看高级选项,我们就可以看到两个新的服务器选项。其中最重要的一个新选项是awe enabled选项,它能够让SQL Server企业版提高服务器的内存访问能力。默认情况下,SQL Server能够使用的最大RAM是3GB。在Windows 2000上,应用程序可以 使用Address Windowing Extensions(AWE)API访问更多的RAM。例如,在Windows 2000 Advanced Server中,我们能够使用多达8GB的内存,只有Windows 2000 Datacenter Server支持64GB内存才超过它。显然,当SQL Server拥有更多的可用内存,它将能够缓冲更多的数据,改善查询的响应时间。

不过,启用awe enabled选项也有副作用。启用awe enabled选项之后,SQL Server不再动态地分配内存。由于缺乏内存动态分配功能,管理负担随之增加,因为我们必须仔细地监视RAM使用情况。另外,设置awe enabled选项之后,我们还必须设置max server memory选项。如果我们不设置max server memory选项,服务器RAM又等于最低要求3GB,SQL Server将在启动的时候占据机器上几乎所有的RAM,只给Windows和其他应用留下128 MB的RAM。通过设置max server memory选项,我们可以限制SQL Server使用的内存总量。

awe enabled选项只能在SQL Server 2000 Enterprise Edition上使用,操作系统必须是Windows 2000 Advance Server或Datacenter。如果你在SQL Server的其他版本上使用这个选项(或者操作系统是WinNT),SQL Server将忽略这个选项。在某些服务器配置组合下,不适当地配置这个选项将导致不可预知的结果。例如,如果我们在Windows 98操作系统、运行SQL Server Personal Edition的机器上设置这个选项,SQL Server可能报告它已经停止(甚至是在它正在运行的时候),而且它将拒绝停止SQL Server实例。

在SQL Server Enterprise Edition服务器上启用AWE包括三个步骤。首先,我们必须确保启动SQL Server实例的帐号具有在内存中锁定页的权限。SQL Server安装时自动把页锁定权限授予我们指定用来启动SQL Server服务的Windows帐号;但是,如果后来这个帐号已经改变,你应该检查一下已经把哪些权限授予了启动SQL Server的用户。检查帐号的权限可以使用Windows 2000的组策略工具。第二个步骤是运行sp_configure存储过程,把awe enabled选项设置为1。然后,我们必须执行RECONFIGURE,用手工方式重新启动SQL Server。配置命令的语法为:

EXEC sp_configure 'awe enabled', '1' RECONFIGURE

注意,在Windows 2000或者NT上,如果要访问高于4GB的物理内存,我们还必须采取其他一些措施,即修改boot.ini文件,加入/pae选项。

第二个新的SQL Server 2000选项用来启用C2级安全审核模式。C2是一个政府安全等级,它保证系统能够保护资源并具有足够的审核能力。C2模式允许我们监视对所有数据库实体的所有访问企图。启用SQL Server的C2审核功能的命令如下:

EXEC sp_configure 'c2 audit mode', '1' RECONFIGURE

(要实现完整的C2级安全保证,Windows操作系统也必须提供相应的支持)启用C2审核模式并重新启动之后,SQL Server自动在\MSSQL\Data目录下面创建跟踪文件。我们可以使用SQL Server Profiler查看这些监视服务器活动的跟踪文件。

SQL Server以128KB大小的块为单位把数据写入跟踪文件。因此,当SQL Server非正常停止时,我们最多可能丢失128 KB的日志数据。可以想象,包含审核信息的日志文件将以很快的速度增大。例如,某次试验只访问了三个表,跟踪文件已经超过了1MB。当跟踪文件超过200MB时,C2审核将关闭旧文件并创建新文件。每次SQL Server启动的时候,它会创建一个新的跟踪文件。如果磁盘空间不足,SQL Server将停止运行,直至我们为审核日志释放出足够的磁盘空间并重新启动SQL Server实例。在SQL Server启动的时候,我们可以使用-f参数禁用审核。

减少的服务器选项
在SQL Server 2000中,Microsoft减少了原有的几个选项,让SQL Server 2000自动配置这些选项。减少的选项中最引人注目的是max async IO选项。这个选项允许数据库管理员指定在单一的数据库文件上可以出现多少异步的磁盘读取和写入操作。SQL Server 7.0中的max async IO选项是人们了解最少的选项之一,它的默认值是32,但很少有管理员去调整这个值。在SQL Server 2000中,这个异步IO选项随着SQL Server接收的适配器反馈信息动态地上升或者下降,SQL Server利用反馈算法确定服务器负载以及SQL Server系统能够控制的数量。

数据库选项
在SQL Server 2000中,如果你曾经查看过Enterprise Manager中数据库的Options选项卡,你可能会对一些通用选项的消失感到困惑(要访问Options选项卡,在Enterprise Manager中右击数据库然后选择Properties)。Options选项卡中减少了trunc. log on chkpt.以及Select Into/Bulk Copy这两个选项,如图1所示。为了清楚和向后兼容起见,这些通用选项现在称为recovery model(恢复模型)选项。如果用SQL Server 2000的Enterprise Manager连接SQL Server 7.0数据库,我们仍旧可以看到这些老选项。以前,我们使用下面的命令为Northwind数据库开启trunc. log on chkpt.选项:

SP_DBOPTION Northwind ,'trunc. log on chkpt.', true

设置好选项之后,我们可以通过Options选项卡或者下面的查询检查Northwind数据库上这些选项设置是否成功:

SELECT DATABASEPROPERTY ('Northwind', 'IsTruncLog')

结果为1表示选项设置成了true;结果为0表示选项设置成了false。如果结果为NULL,它表示我们或者选择了一个错误的选项,或者数据库不存在。

为了便于使用,Microsoft把trunc. log on chkpt.和Select Into/Bulk Copy选项换成了恢复模型设置。这种选项改变的目的在于确保数据库管理员能够充分理解在灾难恢复策略中恢复模型选项的意义。SQL Server 2000为我们提供了三种数据库恢复模型:simple(简单恢复),full(完全恢复),bulk_logged(大容量日志记录恢复)。

简单恢复模型最容易操作,但它是最缺乏灵活性的灾难恢复策略。选择简单恢复模型等同于把trunc. log on chkpt.设置成true。在这种恢复模型下,我们只能进行完全备份和差异备份(differential backup):这是因为事务日志总是被截断,事务日志备份不可用。一般地,对于一个包含关键性数据的系统,我们不应该选择简单恢复模型,因为它不能够帮助我们把系统还原到故障点。使用这种恢复模型时,我们最多只能把系统恢复到最后一次成功进行完全备份和差异备份的状态。进行恢复时,我们首先要恢复最后一次成功进行的完全备份,然后在此基础上恢复差异备份(差异备份只能把自从数据库最后一次完全备份之后对数据库的改动施加到数据库上)。

完全恢复模型把trunc. log on chkpt.选项和Select Into/Bulk Copy选项都设置成false。完全恢复具有把数据库恢复到故障点或特定即时点的能力。对于保护那些包含关键性数据的环境来说,这种模型很理想,但它提高了设备和管理的代价,因为如果数据库访问比较频繁的话,系统将很快产生庞大的事务日志记录。由于在这种模型中Select Into/Bulk Copy设置成了false,SQL Server将记录包括大容量数据装入在内的所有事件。

最后一种恢复模型是大容量日志记录恢复,它把trunc. log on chkpt.设置成false,把Select Into/Bulk Copy设置成true。在大容量日志记录恢复模型中,大容量复制操作的数据丢失程度要比完全恢复模型严重。完全恢复模型记录大容量复制操作的完整日志,但在大容量日志记录恢复模型下,SQL Server只记录这些操作的最小日志,而且无法逐个控制这些操作。在大容量日志记录恢复模型中,数据文件损坏可能导致要求手工重做工作。 下表比较了三种恢复模型的特点。

恢复模型 优点 工作损失表现 能否恢复到即时点?
简单 允许高性能大容量复制操作。
收回日志空间,使得空间要求最小。 必须重做自最新的数据库或差异备份后所发生的更改。 可以恢复到任何备份的结尾处。随后必须重做更改。
完全 数据文件丢失或损坏不会导致工作损失。
可以恢复到任意即时点(例如,应用程序或用户错误之前)。 正常情况下没有。
如果日志损坏,则必须重做自最新的日志备份后所发生的更改。 可以恢复到任何即时点。
大容量日志记录 允许高性能大容量复制操作。
大容量操作使用最少的日志空间。 如果日志损坏,或者自最新的日志备份后发生了大容量操作,则必须重做自上次备份后所做的更改。 否则不丢失任何工作。 可以恢复到任何备份的结尾处。随后必须重做更改。

在数据库的Options选项卡中,我们可以从Model下拉列表框选择Simple把恢复模型改成简单模型。另外,Microsoft扩展了ALTER DATABASE命令,我们可以用它设置数据库属性。例如,用下面这个T-SQL命令可以把恢复模型设置为完全恢复模型:

ALTER DATABASE Northwind SET RECOVERY FULL

SQL Server 2000提供了把数据库转入单用户模式的许多选项,它们都属于那种最令人感兴趣的隐藏选项。为了修正讹误或其他数据问题,数据库管理员常常要把数据库转入单用户模式。当数据库处于这种模式时,其它用户将不能再访问数据,从而使得管理员能够在用户访问损坏的数据之前修正数据问题。在SQL Server 7.0中,在把数据库转入单用户模式之前,我们必须确保所有用户都已经断开连接。对于一个高速OLTP数据库系统,比如电子商务系统,断开所有用户的连接非常困难,因为就在我们断开某个用户的连接时,其他用户还会连接数据库。SQL Server 2000极大地改进了这个操作过程,我们可以给用户一个指定的时间去完成他们的事务,然后由SQL Server自动断开他们的连接。另外,我们也可以在不提供任何延迟时间的情况下断开所有的连接。

把数据库转入单用户模式的方法之一是在数据库的Options选项卡选中Restrict Access检查框,然后选择Single user。另外,Microsoft扩展了ALTER DATABASE命令,使它能够把数据库转入单用户模式,语法如下:

ALTER DATABASE Northwind SET SINGLE_USER

执行这个命令之后,SQL Server等待所有的数据库连接,让它们完成各自的事务。在这种状态下,所有请求连接数据库的用户都将接收到图2显示的错误信息,并被重定向到他们各自的默认数据库(通常是Master数据库)。图2的错误信息意味着数据库处于冻结状态,直至所有用户断开连接。如果目标服务器或者发出命令的用户没有设置query timeout参数,客户端可能无限期地等待查询完成,直至所有的连接被断开。在Query Analyzer中,我们可以在Options屏幕(选择菜单Tools,Options)的Connections选项卡里面指定超时秒数。在单用户模式下,只有发出ALTER DATABASE命令的用户可以保持连接。
另外,我们还可以用ROLLBACK IMMEDIATE命令断开所有打开数据库连接的用户。但我们不能在Enterprise Manager中使用这个命令,而是应该用Query Analyzer执行,例如:

ALTER DATABASE Northwind SET SINGLE_USER WITH ROLLBACK IMMEDIATE

执行这个命令之后,SQL Server立即断开所有的连接并回退它们的事务。所有正在执行事务的用户都会接收到一个连接错误,而且他们不能再连接数据库。

我们可以指定一个时间选项,让SQL Server在断开用户的连接之前等待用户完成他们的事务。这个选项是可选的,它用ROLLBACK AFTER关键词指定,如下面的命令所示:

ALTER DATABASE Northwind SET SINGLE_USER WITH ROLLBACK AFTER 20 SECONDS

执行这个命令之后,SQL Server先等待20秒钟,然后断开所有的连接并回退它们的事务。在这个过程中,SQL Server不再接受新的连接请求,它是一个数据库级的服务器暂停。在这个20秒之内,所有企图连接数据库的新用户都将接收到图2显示的错误信息。如果执行这个命令的时候不存在已经连接的用户,数据库将立即转入单用户模式。

Enterprise Manager的数据库Options选项卡中,最后一个新的配置选项是Compatibility Level,如图1所示。要设置这个选项,我们只需从Compatibility Level下拉框选择一个合适的兼容级别。在这个下拉框中,SQL Server 2000由80代表,7.0由70代表,6.5由65代表。兼容级别选项决定了某些数据库查询操作的执行方法。由于SQL Server的关系引擎在发展变化,某些查询的结果在不同的版本之间可能不同。例如,如果我们执行下面这个查询:

SELECT DATALENGTH('')

依赖于我们为数据库设置的兼容级别是SQL Server 2000、7.0或者6.5,上述查询可能得到两个不同的结果。对于SQL Server 2000或7.0数据库,返回结果是0,因为SQL Server 2000和7.0把空字符串视为真正的空;在SQL Server 6.5兼容模式下,返回结果是1,因为SQL Server 6.5把空字符串视为一个空格。SQL Server 7.0也有这个兼容级别选项,但它只能通过sp_dbcmptlevel存储过程访问。

综上所述,在SQL Server 2000中,Microsoft对服务器和数据库配置方法进行了几个实质性的改动。不要轻视所有本文讨论的选项和其他SQL Server配置选项——即使是一个小小的改动,它也可能对性能产生重大的正面或负面影响。在调整SQL Server的配置选项时,你最好使用Performance Monitor之类的服务器监视工具,确保选项调整不会对服务器性能产生负面影响。

转自 163上海社区 发件人cn_prince(欢喜王子)
p.s

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
105#
 楼主| 发表于 2003-12-23 23:02 | 只看该作者
tip](转贴)SQL 2K 安全指南
SQL 2K 安全指南
文章来源:()

数据库是电子商务、金融以及ERP系统的基础,通常都保存着重要的商业伙伴和客户信息。大多数企业、组织以及政府部门的电子数据都保存在各种数据库中,他们用这些数据库保存一些个人资料,比如员工薪水、个人资料等等。数据库服务器还掌握着敏感的金融数据。包括交易记录、商业事务和帐号数据,战略上的或者专业的信息,比如专利和工程数据,甚至市场计划等等应该保护起来防止竞争者和其他非法者获取的资料。数据完整性和合法存取会受到很多方面的安全威胁,包括密码策略、系统后门、数据库操作以及本身的安全方案。但是数据库通常没有象操作系统和网络这样在安全性上受到重视。


微软的SQL Server是一种广泛使用的数据库,很多电子商务网站、企业内部信息化平台等都是基于SQL Server上的,但是数据库的安全性还没有被人们更系统的安全性等同起来,多数管理员认为只要把网络和操作系统的安全搞好了,那么所有的应用程序也就安全了。大多数系统管理员对数据库不熟悉而数据库管理员有对安全问题关心太少,而且一些安全公司也忽略数据库安全,这就使数据库的安全问题更加严峻了。数据库系统中存在的安全漏洞和不当的配置通常会造成严重的后果,而且都难以发现。数据库应用程序通常同操作系统的最高管理员密切相关。广泛SQL Server数据库又是属于“端口”型的数据库,这就表示任何人都能够用分析工具试图连接到数据库上,从而绕过操作系统的安全机制,进而闯入系统、破坏和窃取数据资料,甚至破坏整个系统。


这里,我们主要谈论有关SQL Server2000数据库的安全配置以及一些相关的安全和使用上的问题。


在进行SQL Server 2000数据库的安全配置之前,首先你必须对操作系统进行安全配置,保证你的操作系统处于安全状态。然后对你要使用的操作数据库软件(程序)进行必要的安全审核,比如对ASP、PHP等脚本,这是很多基于数据库的WEB应用常出现的安全隐患,对于脚本主要是一个过滤问题,需要过滤一些类似 , ‘ ; @ / 等字符,防止破坏者构造恶意的SQL语句。接着,安装SQL Server2000后请打上补丁sp1以及最新的sp2。

下载地址是:http://www.microsoft.com/sql/downlo...ds/2000/sp2.asp


在做完上面三步基础之后,我们再来讨论SQL Server的安全配置。


1、使用安全的密码策略

我们把密码策略摆在所有安全配置的第一步,请注意,很多数据库帐号的密码过于简单,这跟系统密码过于简单是一个道理。对于sa更应该注意,同时不要让sa帐号的密码写于应用程序或者脚本中。健壮的密码是安全的第一步!

SQL Server2000安装的时候,如果是使用混合模式,那么就需要输入sa的密码,除非你确认必须使用空密码。这比以前的版本有所改进。

同时养成定期修改密码的好习惯。数据库管理员应该定期查看是否有不符合密码要求的帐号。比如使用下面的SQL语句:

Use master

Select name,Password from syslogins where password 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_cmdshell'

xp_cmdshell是进入操作系统的最佳捷径,是数据库留给操作系统的一个大后门。如果你需要这个存储过程,请用这个语句也可以恢复过来。

sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'

如果你不需要请丢弃OLE自动存储过程(会造成管理器中的某些特征不能使用),这些过程包括如下:

Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty

Sp_OAMethod Sp_OASetProperty Sp_OAStop

去掉不需要的注册表访问的存储过程,注册表存储过程甚至能够读出操作系统管理员的密码来,如下:

Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues

Xp_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端口了(请参考《深入探索SQL Server网络连接的安全问题》)。

不过微软还是考虑到了这个问题,毕竟公开而且开放的端口会引起不必要的麻烦。在实例属性中选择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/tech...ty/ipsecloc.asp

上面主要介绍的一些SQL Server的安全配置,经过以上的配置,可以让SQL Server本身具备足够的安全防范能力。当然,更主要的还是要加强内部的安全控制和管理员的安全培训,而且安全性问题是一个长期的解决过程,还需要以后进行更多的安全维护。

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
106#
 楼主| 发表于 2003-12-23 23:03 | 只看该作者
tip](转贴)sql 系统存储过程xp_cmdshell使用
xp_cmdshell
以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出。授予非管理用户执行 xp_cmdshell 的权限。



说明 在 Microsoft® Windows® 95 或 Microsoft Windows 98 操作系统中执行 xp_cmdshell 时,将不把 xp_cmdshell 的返回代码设置为唤醒调用的可执行文件的进程退出代码。返回代码始终为 0。


语法
xp_cmdshell {'command_string'} [, no_output]

参数
'command_string'

是在操作系统命令行解释器上执行的命令字符串。command_string 的数据类型为 varchar(255) 或 nvarchar(4000),没有默认值。command_string 不能包含一对以上的双引号。如果由 command_string 引用的文件路径或程序名称中有空格,则需要使用一对引号。如果使用嵌入空格不方便,可考虑使用 FAT 8.3 文件名作为解决办法。

no_output

是可选参数,表示执行给定的 command_string,但不向客户端返回任何输出。

返回代码值
0(成功)或 1(失败)

结果集
执行下列 xp_cmdshell 语句将返回当前目录的目录列表。

xp_cmdshell 'dir *.exe'

行以 nvarchar(255) 列的形式返回。

执行下列 xp_cmdshell 语句将返回随后的结果集:

xp_cmdshell 'dir *.exe', NO_OUTPUT

下面是结果:

The command(s) completed successfully.

注释
xp_cmdshell 以同步方式操作。在命令行解释器命令执行完毕之前,不会返回控制。

当授予用户执行权限时,用户能在 Microsoft Windows NT® 命令行解释器上执行运行 Microsoft SQL Server™ 的帐户有权执行的任何操作系统命令。

默认情况下,只有 sysadmin 固定服务器角色的成员才能执行此扩展存储过程。但是,也可以授予其他用户执行此存储过程的权限。

当作为 sysadmin 固定服务器角色成员的用户唤醒调用 xp_cmdshell 时,将在运行 SQL Server 服务的安全上下文中执行 xp_cmdshell。当用户不是 sysadmin 组的成员时,xp_cmdshell 将模拟使用 xp_sqlagent_proxy_account 指定的 SQL Server 代理程序的代理帐户。如果代理帐户不能用,则 xp_cmdshell 将失败。这只是针对于 Microsoft® Windows NT® 4.0 和 Windows 2000。在 Windows 9.x 上,没有模拟,且 xp_cmdshell 始终在启动 SQL Server 的 Windows 9.x 用户的安全上下文下执行。



说明 在早期版本中,获得 xp_cmdshell 执行权限的用户在 MSSQLServer 服务的用户帐户上下文中运行命令。可以通过配置选项配置 SQL Server,以便对 SQL Server 无 sa 访问权限的用户能够在 SQLExecutiveCmdExec Windows NT 帐户的上下文中运行 xp_cmdshell。在 SQL Server 7.0 中,该帐户称为 SQLAgentCmdExec。现在,不是 sysadmin 固定服务器角色成员的用户将在该帐户上下文中运行命令,而无需再进行配置更改。


权限
xp_deletemail 的执行权限默认授予 sysadmin 固定服务器角色的成员,但可以授予其他用户。



重要 如果为 MSSQLServer 服务选用的 Windows NT 帐户不是本地管理员组的成员,则非 sysadmin 固定服务器角色成员的用户将无法执行 xp_cmdshell。


示例
A. 返回可执行文件列表
下例显示执行目录命令的 xp_cmdshell 扩展存储过程。

EXEC master..xp_cmdshell 'dir *.exe'

B. 使用 Windows NT net 命令
下例显示 xp_cmdshell 在存储过程中的使用。下例先用 net send 通知用户 SQL Server 即将关闭,然后用 net pause 暂停服务器,最后用 net stop 关闭服务器。

CREATE PROC shutdown10
AS
EXEC xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server shutting down
in 10 minutes. No more connections allowed.', no_output
EXEC xp_cmdshell 'net pause sqlserver'
WAITFOR DELAY '00:05:00'
EXEC xp_cmdshell 'net send /domain: SQL_USERS ''SQL Server shutting down
in 5 minutes.', no_output
WAITFOR DELAY '00:04:00'
EXEC xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server shutting down
in 1 minute. Log off now.', no_output
WAITFOR DELAY '00:01:00'
EXEC xp_cmdshell 'net stop sqlserver', no_output

C. 不返回输出
下例使用 xp_cmdshell 执行命令字符串,且不向客户端返回输出。

USE master
EXEC xp_cmdshell 'copy c:\sqldumps\pubs.dmp \\server2\backups\sqldumps',
NO_OUTPUT

D. 使用返回状态
在下例中,xp_cmdshell 扩展存储过程也给出了返回状态。返回代码值存储在变量 @result 中。

DECLARE @result int
EXEC @result = xp_cmdshell 'dir *.exe'
IF (@result = 0)
PRINT 'Success'
ELSE
PRINT 'Failure'

E. 将变量内容写入文件
下例将当前目录内容写入当前服务器目录下名为 dir_out.txt 的文件中。

DECLARE @cmd sysname, @var sysname
SET @var = 'dir /p'
SET @cmd = 'echo ' + @var + ' > dir_out.txt'
EXEC master..xp_cmdshell @cmd

摘自163北京社区 发信人: fjwzw(秋风扫落叶)

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
107#
发表于 2003-12-24 09:50 | 只看该作者
最初由 ccwlm741212 发布
[B]使用命名管道访问SQL Server

一、意义
  SQL Server安装后缺省配置是允许客户端以TCP/IP协议来访问,用户只需要知道SQL Server账号的密码就可以访问,这样很不安全,因为很多WEB程序是直接把连接信息(数据库服务器、连接账号、连接密码)写在程序里面的,破坏者或黑客可以通过某些方法直接查看源代码获取SQL Server账号及密码,他们就可以直接用TCP/IP协议连接到该数据库服务器,对数据或配置进行修改甚至作破坏。使用命名管道时用户必须得具有访问SQL Server所在机器的资源以后才有可能访问SQL Server,如果用户没有访问资源的权限,即便他知道SQL Server账号密也连不上。

二、实现
  1、服务器配置
    打开SQL Server的Server Network Utility:“开始->程序->Microsoft SQL Server 7.0->Server Network Utility”,在“General”栏中,删除不必要的连接配置,然后按“Add...”增加一个Named Pipes连接:Network librarys选Named Pipes,Server name为服务器的机器名
  2、客户机配置
    打开SQL Server的Client Network Utility:“开始->程序->Microsoft SQL Server 7.0->Client Network Utility”,在“General”栏中,删除不必要的连接配置,然后按“Add...”增加一个Named Pipes连接:Network librarys选Named Pipes,Server alias为待连接的SQL Server所在服务器的机器名(局域网)或IP地址(广域网)
  3、连接方法
    可以分为两种情况:
    A、客户机已经登陆到服务器所在的域
      客户机已经具有访问服务器资源的权限,可以直接连接SQL Server
    B、客户机没有登陆到服务器所在的域
      客户机不具备访问服务器资源的权限,可以在“开始->运行”中输入\\<服务器机器名或IP地址>,然后输入NT账号和密码,验证通过后客户机就具有访问服务器资源的权限,此时该客户机就可以连接SQL Server了 [/B]



对于采用WEB开发采用TCP/IP协议会导致安全问题的论述表示不同意见,会误导大家。因为,NAMED PIPE协议对WEB服务器和数据库服务器之间需要操作系统级的安全认证,照作者说法,岂不是也存在安全隐患?

问题不是出在协议本身,而是开发者的开发方法。正如作者所说的程序员会把数据库连接的信息写在一个INC文件,而这个INC文件所在的web目录往往又设置成了可读写。这些问题,都是开发者自身的问题,而不是采用了什么协议的问题。

因此,我总结在WEB开发的时候,应该注意:
1 体系架构设计应该注意, 数据库服务器和WEB服务器不要位于同一台物理服务器,WEB服务器应该配置两块网卡,目的只有一个,就是要把数据库服务器放置在内网,而不是暴露在INTERNET上。
2 WEB服务器前应该配置防火墙,提高WEB服务器的抗侵袭能力
3 数据库登陆账号的安全问题,WEB程序不应该通过具有系统管理员权限的账号访问系统。数据库员应很好地规划数据库访问权限地控制。
4 WEB端程序,要避免把数据库连接的信息直接写在jsp或asp中,方法很多:
a) 可以考虑odbc,程序中只需要一个dsn就可以,账号和密码设置在odbc管理器中。
b) 把连接串信息加密,程序自己解密
c) 把数据库操作部分做成一个组件。
[/COLOR]

使用道具 举报

回复
论坛徽章:
4
2011新春纪念徽章
日期:2011-02-18 11:43:35ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
108#
发表于 2003-12-24 15:22 | 只看该作者

程兄,百忙之中,还能整理这么多的资料,佩服佩服呀

程兄,百忙之中,还能整理这么多的资料,佩服佩服呀

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
109#
 楼主| 发表于 2003-12-24 22:15 | 只看该作者

Re: 程兄,百忙之中,还能整理这么多的资料,佩服佩服呀

最初由 wjianl 发布
[B]程兄,百忙之中,还能整理这么多的资料,佩服佩服呀 [/B]


谁叫你小子不来咱这捧场啊

使用道具 举报

回复
论坛徽章:
0
110#
发表于 2003-12-26 18:07 | 只看该作者
真是太好了,以后经常来

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表