安全性管理AdaptiveServerEnterprise16.
0文档ID:DC01812-01-1600-01最后修订日期:2014年3月2014SAP股份公司或其关联公司版权所有,保留所有权利.
未经SAP股份公司明确许可,不得以任何形式或为任何目的复制或传播本文的任何内容.
本文包含的信息如有更改,恕不另行事先通知.
由SAP股份公司及其分销商营销的部分软件产品包含其它软件供应商的专有软件组件.
各国的产品规格可能不同.
上述资料由SAP股份公司及其关联公司(统称"SAP集团")提供,仅供参考,不构成任何形式的陈述或保证,其中如若存在任何错误或疏漏,SAP集团概不负责.
与SAP集团产品和服务相关的保证仅限于该等产品和服务随附的保证声明(若有)中明确提出之保证.
本文中的任何信息均不构成额外保证.
SAP和本文提及的其它SAP产品和服务及其各自标识均为SAP股份公司在德国和其他国家的商标或注册商标.
如欲了解更多商标信息和声明,请访问:http://www.
sap.
com/corporate-en/legal/copyright/index.
epx#trademark.
目录第1章:安全性简介.
1什么是"信息安全性"1公共标准配置评估1FIPS140-2验证的加密模块2第2章:SAPASE中的安全性管理.
3设置安全性的建议4设置安全性的示例4SAPASE中的安全性功能5标识和验证6自由选择访问控制6角色分离7责任审计8数据的保密性8第3章:管理SAPASE登录名和数据库用户.
9登录名简介9创建登录帐户10上次登录和管理不活动帐户10定义StalePeriod11跟踪上次登录11防止不活动帐户被锁定11登录的验证机制11更改登录帐户11删除登录帐户12选择和创建口令13最大登录尝试次数13设置全服务器范围的MaximumFailedLogins.
.
.
.
.
.
13安全性管理iii为特定登录名设置MaximumFailedLogins14为特定角色设置MaximumFailedLogins14更改特定登录名的MaximumFailedLogins14更改特定角色的MaximumFailedLogins14在丢失口令后登录14显示登录名的口令信息15显示角色的口令信息16检查口令中是否至少包含一个数字16设置和更改MinimumPasswordLength17为特定登录名设置MinimumPasswordLength.
.
.
.
17为特定角色设置MinimumPasswordLength.
.
.
.
.
.
.
.
17更改特定登录名的MinimumPasswordLength.
.
.
.
17更改特定角色的MinimumPasswordLength.
.
.
.
.
.
.
.
18删除特定登录名的MinimumPasswordLength.
.
.
.
18口令复杂程度检查18激活或停用口令复杂程度检查18不允许使用简单口令18自定义口令复杂程度检查19指定口令中的字符19口令复杂程度选项交叉检查20设置口令复杂程度检查20启用自定义口令检查23为口令设置登录名和角色有效期25回避口令保护26为新登录名创建口令有效期26为新角色创建口令有效期27为口令添加的创建日期27更改或删除登录名或角色的口令有效期27保护网络上的登录口令27保护磁盘上和内存中存储的登录口令30口令的字符集注意事项30升级行为31登录口令降级31在升级并随之降级后保留口令加密34目录ivAdaptiveServerEnterprise在升级之前增加空间34降级35当allowpassworddowngrade设置为0时,口令会到期37显示allowpassworddowngrade的当前值37高可用性环境中的口令38升级后更新的口令39建立口令和登录策略39登录失败40锁定登录帐户和角色40锁定和解锁登录名和角色41使用syslogins跟踪帐户是否已锁定42跟踪锁定的角色43锁定和解锁角色43锁定拥有阈值的登录名44管理登录配置文件44登录配置文件属性44登录配置文件属性优先级45创建登录配置文件45创建缺省登录配置文件46将登录配置文件与登录帐户相关联46忽略登录配置文件46将现有的登录帐户值转移到新的登录配置文件46手动复制登录配置文件47向登录配置文件授予角色47调用登录脚本47显示登录配置文件信息48修改登录配置文件49添加或删除自动激活的角色49将登录配置文件更改为缺省登录配置文件49删除登录配置文件50向数据库添加用户50将"guest"用户添加到数据库51"guest"用户权限51目录安全性管理v用户数据库中的"guest"用户51已安装系统数据库中的"guest"用户52pubs2和pubs3中的"guest"用户52将guest用户添加到服务器52添加远程用户52创建组53更改组成员资格53创建组和添加用户54数据库中的别名54添加别名55删除别名55别名相关信息56获取有关用户的信息56有关用户和进程的报告56获取有关登录帐户的信息57获取有关数据库用户的信息58查找用户名和ID58更改用户信息59更改口令60要求新口令60空口令61在丢失口令后登录61更改用户会话信息61删除用户和组62监控许可证的使用状况63如何计算许可证数63配置许可证使用监控器63通过管家任务监控许可证使用状况64记录用户许可证数64用户数和登录ID数65登录连接限制65获取有关使用状况的信息:收费退回式会计66指定添加会计统计信息的间隔67目录viAdaptiveServerEnterprise第4章:管理角色69系统定义角色概述69系统角色70计划用户定义角色73创建用户定义的角色73添加或删除角色口令74角色层次和互斥性74定义和更改角色互斥性74定义和更改角色层次75登录时的缺省激活77角色激活的条件77删除用户定义角色77激活或停用角色78显示有关角色的信息78查找角色ID和名称79查看活动的系统角色79显示角色层次79查看层次中的用户角色80确定互斥性80确定角色激活80检查存储过程中的角色80授予或撤消角色81授予角色81了解grant命令和角色82撤消角色82保护角色口令82字符集考虑事项83锁定的角色和syssrvroles83适用于角色口令的登录口令策略检查83针对口令策略选项的高可用性支持84针对角色配置SAPASE85升级SAPASE85降级SAPASE85目录安全性管理vii第5章:外部验证.
89针对基于网络的安全性配置SAPASE89SAPASE安全服务90管理基于网络的安全性90安全性的配置文件91服务器的安全性信息91准备libtcl.
cfg以使用基于网络的安全性92objectid.
dat文件94向安全性机制标识用户和服务器95针对安全性配置SAPASE95启用基于网络的安全性95要求对用户进行验证96建立安全缺省登录96将安全性机制登录名映射到服务器名97要求使用加密实现消息保密性97要求数据完整性98基于网络的安全性的内存要求98添加登录以支持统一登录98添加登录的常规步骤98为远程连接建立Kerberos安全性机制99统一登录和远程服务器登录100获取关于远程服务器的信息100使用安全服务连接到服务器100客户端的安全性机制101获取有关可用安全服务的信息101Kerberos102Kerberos兼容性102在Kerberos下启动SAPASE服务器103配置Kerberos103主体名称107服务器主体名称107使用sybmapname处理用户主体名称108Kerberos并发验证111目录viiiAdaptiveServerEnterprise为LDAP用户验证配置SAPASE111组合型DN算法112搜索型DN算法112在新的SAPASE安装中配置LDAP113将现有SAPASE服务器迁移到LDAP113LDAP用户验证管理113LDAP用户验证口令信息的更改115故障切换支持115登录名和LDAP用户帐户115辅助查找服务器支持116LDAP服务器状态转换117LDAP用户验证调优119对登录映射添加更严格的控制120外部验证的登录映射121LDAP用户验证错误的故障排除122配置LDAP服务器123LDAP用户验证123自动LDAP用户验证和故障恢复124LDAP故障恢复时间间隔124为使用PAM的验证配置SAPASE125在SAPASE中启用PAM126配置操作系统126在同一计算机上运行32位和64位服务器126为PAM用户验证配置SAPASE127登录名和PAM用户帐户127增强的登录控制128强制验证128使用sp_maplogin映射登录129显示映射信息129确定验证机制130第6章:管理用户权限.
131授予创建数据库的权限132更改数据库所有权132目录安全性管理ix数据库所有者特权133数据库对象所有者特权134系统过程的权限134授予或撤消权限135对象访问权限135具体标识136SQL92标准一致性的特殊要求136授予对象访问权限示例137撤消对象访问权限示例138授予dbcc命令的权限138服务器范围的和特定于数据库的dbcc命令.
.
.
.
.
.
.
.
138系统表的权限139授予系统表和存储过程的缺省权限139组合grant和revoke语句141权限顺序和层次142获取另一用户的权限143setuser命令143代理授权144使用setproxy限制角色144执行代理授权145应用程序的代理授权146更改数据库对象所有权147支持的对象类型147移交所有权的授权148移交所有权148移交系统数据库中的对象所有权148移交数据库所有者对象的所有权149preservepermissions命令149安全问题149移交加密密钥的所有权150权限报告150查询代理授权的sysprotects表150显示有关用户和进程的信息151报告数据库对象或用户的权限151目录xAdaptiveServerEnterprise报告特定表的权限152视图和存储过程作为安全性机制153使用视图作为安全性机制153使用存储过程作为安全机制154角色和存储过程155了解所有权链155视图和所有权链的示例156过程和所有权链的示例157触发器的权限158使用executeasowner或executeascaller执行过程.
.
.
.
158创建引用对象未限定名称的过程161在其它具有完全限定名的数据库里调用嵌套过程的过程162行级访问控制163访问规则163访问规则的语法164访问和扩展访问规则示例166访问规则和altertable命令168访问规则和bcp168访问规则作为用户定义的Java函数168使用应用程序上下文功能170设置应用程序上下文函数的使用权限171SYS_SESSION系统应用程序上下文172使用访问规则和ACF解决问题173使用登录触发器174创建登录触发器174配置登录触发器175执行登录触发器176登录触发器输出176对其它应用程序使用登录触发器177登录触发器限制180禁用对登录触发器的execute特权180从登录触发器导出set选项181设置全局登录触发器182目录安全性管理xi第7章:谓词特权.
183访问规则和谓词特权之间的差异183用于谓词特权的命令184将SAPASE配置为使用谓词特权184enablepredicatedprivileges184授予谓词特权185授予对select数据的访问权限185授予对update数据的访问权限186授予对delete数据的访问权限186使用谓词特权强制执行数据隐私策略186撤消谓词特权187SAPASE如何将谓词特权保存在sysprotects中188谓词角色激活188组合谓词以强制执行行级特权189示例1:组合针对同一个表访问的多个授权中的谓词190示例2:组合应用于不同列集的多个授权中的谓词.
.
.
.
191示例3:组合针对不同访问的多个授权中的谓词.
.
.
.
.
.
.
192使用谓词特权时的SQL行为192所有权链对谓词特权的影响193ansi_permissions和谓词特权194谓词所进行的访问的相关权限195谓词特权和触发器196重新编译谓词特权196不允许递归谓词处理197通过谓词的信息泄漏197第8章:细化权限.
199将SAPASE配置为使用细化权限199系统特权199作为系统定义角色一部分的特权的效果200权限管理200目录xiiAdaptiveServerEnterprisemanagesecuritypermissions特权200manageserverpermissions特权202managedatabasepermissions特权204manageanyobjectpermission特权206授予系统定义的角色的特权207分配给数据库所有者的特权210细化权限添加sa_serverprivs_role212授予系统管理员的缺省角色214限制系统管理员和数据库所有者的权限214Enablegranularpermissions和sybsecurity215登录到锁定的服务器216常规使用场景217系统表master.
dbo.
sysprotects218数据库用户usedb_user帐户219可授予的系统特权220第9章:数据的保密性.
247公开密钥密码术247SSL概述249SAPASE中的SSL249SSL过滤器249通过证书进行的验证250连接类型251启用SSL251请求证书252创建服务器目录条目253管理证书253性能255密码成套程序255@@ssl_ciphersuite256SSL密码成套程序优先选项256使用SSL指定公用名261使用sp_listener指定公用名261Kerberos保密性262目录安全性管理xiii转储和装载数据库时使用口令保护262口令和字符集263删除残留数据263可能导致残留数据的操作263启用残留数据删除265残留数据删除示例266用于删除残留数据的设置组合268检查是否启用残留数据删除269限制270第10章:审计.
271审计系统271sybsecurity数据库272审计追踪272审计队列273管理审计系统273安装审计系统274审计设备预安装建议274使用installsecurity在UNIX上安装审计274在Windows上使用instsecu安装审计275使用auditinit安装审计276启用或禁用审计282重新启动审计282配置审计系统282在源代码控制系统中管理已部署资源283审计配置更改283将SAPASE与操作系统的审计记录相关联.
.
.
.
.
.
.
283设置全局审计选项283修改审计系统299移动sybsecurity审计数据库299使用auditinit删除设备条目300使用auditinit更改设备条目301审计追踪管理302在sybsecurity中创建多个sysaudits表303目录xivAdaptiveServerEnterprise设置阈值过程303审计配置参数306查询审计追踪307向审计追踪中添加用户指定的记录308截断事务日志309在不截断的情况下管理事务日志309单表审计310单表审计的阈值过程311当前审计表填满时会发生什么312当前审计表填满时恢复312审计表312读取extrainfo列313监控失败登录尝试次数326审计登录失败326目录安全性管理xv目录xviAdaptiveServerEnterprise第1章安全性简介信息可能是公司的最重要资产.
信息与其它资产一样,也需要保护.
系统管理员应确定如何以最佳方式保护公司数据库中包含的信息,以及谁可访问该信息.
单个数据库服务器需要功能强大而灵活的安全性支持.
什么是"信息安全性"用户和用户所访问的数据可能位于世界各地,由非受托网络连接.
确保这种环境中的敏感数据和事务的机密性和完整性至关重要.
只有需要信息的人在需要时可以获得信息,信息才是有用的.
由于商业关系复杂多变,因此只允许经过授权的用户访问信息至关重要.
在考虑企业的安全性时,应遵循以下一些一般原则:敏感的信息应保持机密性–请确定哪些用户应能访问哪些信息.
系统应强制实施完整性保护–服务器应强制执行规则和约束以确保信息准确和完整.
信息应保持可用–即使已实施了所有安全保护措施,任何需要访问信息的人在需要信息时也应该能够访问到此信息.
明确公司要保护的内容,以及外部有关各方对公司有何要求:明确信息资产以及当它们易受攻击或受到损害时会有哪些安全风险.
明确并了解适用于公司和信息资产的所有法律、法令、规章以及合约协议.
明确公司的业务流程及其对信息资产的要求,以兼顾实际业务需要和安全风险.
安全要求会随着时间的推移而改变.
请定期重新评估安全要求,确保它们仍能体现出公司的需要.
设置一系列满足公司安全性目标的控制和策略,这样做可以建立一个信息安全策略文档,该文档阐明了为信息安全性所做的决策.
公共标准配置评估已依照公共标准评估和验证方案的条款对SAPAdaptiveServer进行了评估和验证.
SAPASE还使用FIPS140-2认证模块实现加密功能.
信息技术安全性评估公共标准是计算机安全性认证的一项国际标准(ISO/IEC15408).
公共标准由加拿大、法国、德国、荷兰、英国和美国的政府制定.
SAPASE15.
0.
1版于2007年9月完成了公共标准验证.
"已评估的配置"包括带有安全性和目录服务选项的15.
0.
1版.
安全性评估是依照公共标准评估和验证方案安全性管理1(CCEVS)的过程和方案来实施的.
在信息技术安全性评估公共标准2.
3版和2005年8月生效的国际解释中介绍了判定SAPASE所依据的标准.
如果按照《安装用于公共标准配置的AdaptiveServer的补充说明》(SupplementforInstallingAdaptiveServerforCommonCriteriaConfiguration)中的说明配置SAPASE,则SAPASE满足SybaseAdaptiveServerEnterprise安全性目标(1.
5版)中规定的所有安全性功能要求.
SAPASE支持八种安全性功能:加密支持–SAPASE支持列级的透明数据加密.
SQL语句和扩展提供了安全的密钥管理.
安全性审计–检查访问、验证尝试和管理员功能的审计机制.
该安全性审计功能记录了日期、时间、负责人和在审计追踪中描述事件的其它详细信息.
用户数据保护–SAPASE对适用的数据库对象实行自由选择访问控制策略:数据库、表、视图、存储过程和加密密钥.
标识和验证–除了基础操作系统机制以外,SAPASE还提供它自己的标识和验证机制.
安全性管理–允许您管理用户和相关特权、访问权限的功能以及其它安全性功能(例如审计追踪).
这些功能受到自由选择访问控制策略规则(包括角色限制)的限制.
保护TOE安全性功能(TSF)–SAPASE将其上下文与其用户的上下文分离并使用操作系统机制,可确保SAPASE使用的内存和文件具有适当的访问设置.
SAPASE通过定义明确的界面与用户进行交互,旨在确保强制执行其安全性策略.
资源利用–SAPASE提供资源限制,以防止查询和事务独占服务器资源.
评估目标(TOE)访问–SAPASE允许经过授权的管理员构造登录触发器,以限制登录到特定数量的会话,并基于时间限制访问.
经过授权的管理员还可以基于用户身份限制访问.
FIPS140-2验证的加密模块SSL是一种用于保护通过Internet传输敏感信息(例如信用卡号、股票交易和银行交易)的标准.
SAPASE的SSL支持OpenSSL,它是一种可实施SSL和TLS协议以及加密库的开源工具包.
有关详细信息,请参见"开源".
注意:需要安全和目录服务许可证才能使用SSL和启用FIPSloginpasswordencryption参数.
在启用FIPSloginpasswordencryption之后,所有加密操作将使用OpenSSLFIP140-2.
否则将使用OpenSSLnon-FIPS.
加密列功能依赖于对称密钥密码术,并使用相同的FIPS140-2验证的加密模块作为SSL.
请参见《加密列用户指南》.
注意:您必须有加密列许可证才能使用加密列功能.
第1章:安全性简介2AdaptiveServerEnterprise第2章SAPASE中的安全性管理执行主要任务以安全地管理SAPASE.
1.
安装SAPASE,包括审计–包括准备安装、从发行介质中装载文件、执行实际的安装,以及管理所需的物理资源.
请参见所用平台的安装文档和"审计".
2.
建立安全的管理环境–设置系统管理员和系统安全员、创建登录配置文件,以及建立口令和登录策略.
请参见"管理SAPASE登录名和数据库用户".
3.
设置登录名、数据库用户和角色–向服务器中添加用户登录名并将登录配置文件指派给它们.
创建用户定义的角色、定义角色层次和角色的互斥性,以及为登录名指派角色.
向数据库添加用户.
请参见"管理SAPASE登录和数据库用户"和"创建用户定义的角色".
4.
管理用户、组和角色的权限–授予和撤消某些SQL命令、执行某些系统过程以及访问数据库、表、特定表列和视图的权限.
创建访问规则以强制实施精细访问控制.
请参见"管理用户权限".
5.
在数据库中配置加密以对表中的敏感数据进行加密.
对敏感数据进行加密–配置SAPASE以使用列级加密,决定要对哪些列数据进行加密,执行一次性密钥创建操作,并使用altertable执行初始数据加密.
请参见《加密列用户指南》.
6.
建立对数据的完整性控制–添加检查约束、域角色和参照约束以验证传入数据.
请参见《Transact-SQL用户指南》和《参考手册:命令》7.
设置和维护审计–确定审计对象,审计SAPASE的使用情况以及使用审计追踪检测系统渗透和资源误用情况.
请参见"审计".
8.
设置安装以使用高级验证机制和网络安全性–配置服务器以使用诸如基于LDAP、PAM或Kerberos的用户验证、通过加密实现数据保密性以及数据完整性等服务.
请参见"外部验证"和"数据保密性".
另请参见第10章,「审计」(第271页)第3章,「管理SAPASE登录名和数据库用户」(第9页)创建用户定义的角色(第73页)第6章,「管理用户权限」(第131页)第5章,「外部验证」(第89页)第9章,「数据的保密性」(第247页)安全性管理3设置安全性的建议设置登录和审计的安全性建议.
使用sa登录名–当您安装SAPASE时,将使用系统管理员和系统安全员角色配置一个名为"sa"的单一登录名,这意味着sa登录名对数据库中进行的操作具有无限制的控制.
只在初始设置时使用sa登录名.
不要允许几个用户使用sa帐户,而是要通过将特定角色指派给个别管理员来建立个人责任.
更改sa登录口令–sa登录名配置为最初使用NULL口令登录.
在安装后,请立即使用alterlogin命令更改口令.
警告!
登录到SAPASE时,不要使用isql的-P选项来指定口令,因为其他用户可能有机会看到该口令.
启用审计–在管理过程中尽早启用审计,以便记录由系统安全员和系统管理员执行的特权命令.
可能还需要审计由具有其它特殊角色的成员执行的命令,例如操作员在转储和装载数据库时指派登录名–指派与各自操作系统的登录名相同的登录名.
这将使登录更加容易,简化了服务器和操作系统登录帐户的管理,同时也使关联生成的审计数据和操作系统生成的审计数据更加容易.
设置安全性的示例安全性角色特定的命令将用于设置安全的操作环境.
下表显示可指派给用户的特殊角色.
表1.
将为其指派角色的用户名称特权操作系统登录名RajnishSmithsso_rolersmithCatherineMacar-Swansa_rolecmacarSoshiIkedosa_rolesikedoJulioRozanskioper_rolejrozanAlanJohnsondboajohnson根据在上表中列出的角色指派,下表显示了为SAPASE设置安全操作环境可能使用的命令序列.
登录到操作系统后,使用初始sa帐户发出这些命令.
第2章:SAPASE中的安全性管理4AdaptiveServerEnterprise表2.
用于设置安全性的命令示例命令结果isql-Usa以"sa"身份登录到SAPASE.
sa_role和sso_role均处于活动状态.
sp_audit"security","all","all","on"'sp_audit"all","sa_role","all","on"sp_audit"all","sso_role","all","on"'为全服务器范围内与安全性相关的事件以及对激活了sa_role或sso_role的所有操作的审计设置审计选项.
sp_configure"auditing",1启用审计.
注意:在启用审计前,请为审计追踪设置一个阈值过程并确定如何处理sybsecurity中的事务日志.
createlogin添加登录名和口令.
grantrole授予角色.
usesybsecuritysp_changedbownerrsmith通过使系统安全员Rajnish成为数据库所有者,对他授予访问审计数据库sybsecurity的权限.
未授予Alan任何系统定义角色.
sp_lockloginsa,"lock"锁定"sa"登录名,以便没有人能够以"sa"身份登录.
个人只能使用为他们配置的角色.
注意:在为个别用户授予sa_role和sso_role角色并且证实可成功使用之前,不要锁定"sa"登录名.
SAPASE中的安全性功能SAPASE提供有助于保护敏感数据的安全性功能.
标识和验证–确保只有授权的用户才能够登录到系统.
除了基于口令的登录验证外,SAPASE还支持使用Kerberos、LDAP或PAM的外部验证.
自由选择访问控制–通常使用grant和revoke命令提供访问控制,使对象所有者能够限制对对象的访问.
此类控制取决于对象所有者的选择.
角色分离–允许管理员将特权角色授予指定用户,以便只有指定的用户才能执行某些任务.
SAPASE具有预定义角色(称为"系统角色"),例如系统管理员和系统安全员.
另外,系统安全员还可以定义其它角色(称为"用户定义角色").
责任审计–提供了审计事件(例如登录、注销、服务器启动操作、远程过程调用、对数据库对象的访问,以及由特定用户或具有特定活动角色的用户执行的所第2章:SAPASE中的安全性管理安全性管理5有操作)的能力.
SAPASE还提供了单个选项,用于审计全服务器范围内与安全性相关的一组事件.
数据保密性–对客户端/服务器通信使用加密来维持数据的保密性,可用Kerberos或SSL实现.
列级加密可保持数据库中所存储数据的保密性.
不活动数据的保密性是通过口令保护的数据库备份保持的.
标识和验证内部和外部机制均可用于验证.
SAPASE可使用服务器用户标识(SUID)来唯一地标识具有登录帐户名的用户.
此标识链接到每个数据库中的特定用户标识(UID).
访问控制使用服务器用户标识确定是否允许具有此SUID的用户访问对象.
验证会检验某个用户实际上是否是其所声称的用户.
外部验证通过使用中央存储库验证登录名,通常可以增强大型异构应用程序的安全性.
SAPASE支持多种外部验证方法:Kerberos–在包括Kerberos基本结构的企业环境中,提供一种集中且安全的验证机制.
使用一台名为密钥分发中心的第三方受托服务器进行验证,以同时检验客户端和服务器.
LDAP用户验证–轻量目录访问协议(LDAP)可根据用户的登录名和口令,提供一种集中式验证机制.
PAM用户验证–可插入验证模块(PAM)提供一种集中式验证机制,该验证机制为管理和运行时应用程序操作使用操作系统界面.
管理远程服务器《系统管理指南,卷1》中的"管理远程服务器"中介绍了用于管理服务器之间的登录名和用户的内部机制.
自由选择访问控制通过自由选择访问控制,您可以对用户、组和角色授予不同的权限.
对象所有者可将他们拥有的对象访问权限授予其他用户.
数据库所有者还可以授予其他用户将访问权限转交给其他用户的权限.
使用grant命令对用户、组和角色授予权限.
使用revoke命令撤消这些权限.
grant和revoke命令授予用户执行指定命令和访问指定表、过程、视图、加密密钥和列的权限.
某些命令可由任何用户随时使用,而不需要任何权限.
其它命令则只能由具有某种身份的用户(例如系统管理员)使用,并且不可转交.
是否能够指派可被授予或撤消的命令的权限由每个用户的身份(系统管理员、系统安全员、数据库所有者或数据库对象所有者)以及是否授予特定用户可将该权限授予其他用户的权限来决定.
第2章:SAPASE中的安全性管理6AdaptiveServerEnterprise行级访问控制管理员定义的访问规则基于单个数据元素的值,而服务器会透明地强制执行这些规则.
管理员定义访问规则后,只要通过应用程序、即席查询、存储过程、视图等查询受影响的数据,就会自动调用该规则.
使用基于规则的访问控制可简化安装的安全性管理和应用程序开发过程,因为是服务器而不是应用程序强制执行安全性.
利用以下功能,可以实现行级访问控制:访问规则应用程序上下文功能登录触发器域完整性规则谓词特权凭借谓词特权,表所有者通过在grant语句中指定SQLwhere为用户、组或角色提供行级访问.
您可使用SQL的完整功能(包括对其它表的访问)来实施全面的行级安全性策略.
角色分离SAPASE支持的角色允许您强制执行并维护个人责任.
SAPASE提供了系统角色(如系统管理员和系统安全员)和由系统安全员创建的用户定义角色.
角色是权限集合,能让权限被授予者执行工作.
角色为执行操作和管理任务的用户提供个人责任,并允许您审计操作并将操作归于这些用户.
角色层次系统安全员可以定义角色层次,以便用户拥有某个角色时,也会自动拥有层次中较低的角色.
例如,"chief_financial_officer"角色可以包含"financial_analyst"和"salary_administrator"两个角色.
首席财务官可以执行所有任务,并查看工资管理员和财务分析员可以查看的所有数据.
对角色激活的限制安全管理员通过在grantrole语句中指定where子句来限制可能激活角色的条件.
激活角色时,SAPASE在登录期间自动评估where子句表达的条件,或在处理setrole语句时评估.
互斥性可在成员资格级别或激活级别将角色定义为互斥.
例如:您可能不希望将"payment_requestor"和"payment_approver"这两个角色授予同一用户.
可以授予一个用户"senior_auditor"和"equipment_buyer"角色,但您可能不希望允许用户同时启用这两个角色.
可将系统角色以及用户定义角色定义为属于一个角色层次,或定义为互斥.
例如,您可能希望有一个"super_user"角色包含系统管理员角色、操作员角色和技术支持第2章:SAPASE中的安全性管理安全性管理7部门角色.
另外,您可能希望将系统管理员和系统安全员角色定义为在成员资格级别互斥;即一个用户不能被同时授予这两个角色.
责任审计SAPASE包括全面的审计系统.
审计系统包括:sybsecurity数据库用于管理审计的配置参数sp_audit,用于设置所有审计选项sp_addauditrecord,用于将用户定义记录添加到审计追踪安装审计后,可以指定SAPASE用于审计追踪的审计表的数量.
如果使用两个或多个表来存储审计追踪,可以建立一个可以平稳运行而且无须手动干涉又不会丢失记录的审计系统.
系统安全员管理审计系统,且只有系统安全员可以启动和停止审计、设置审计选项以及处理审计数据.
作为系统安全员,您可以为诸如以下事件建立审计:全服务器范围内的与安全性相关的事件创建、删除和修改数据库对象特定用户执行的所有操作或具有特定活动角色的用户执行的所有操作授予或撤消数据库访问权限导入或导出数据登录和注销与加密密钥相关的所有操作数据的保密性您可以通过使用安全套接字层(SSL)标准或Kerberos来加密客户端和服务器之间的通信,以便可以保持数据的保密性.
通过在数据库中使用列级加密和对脱机数据的备份进行加密,您可以保护数据的保密性.
dump和loaddatabase命令包括一个password参数,该参数允许您为数据库转储提供口令保护.
有关详细信息,请参见《系统管理指南,卷2》中的《加密列用户指南》和"备份和恢复用户数据库".
第2章:SAPASE中的安全性管理8AdaptiveServerEnterprise第3章管理SAPASE登录名和数据库用户添加新的登录帐户,向数据库中添加用户,以及授予用户使用命令和访问数据库对象的权限的职责由系统安全员、系统管理员和数据库所有者分担完成.
注意:操作的权限要求假定禁用细化权限.
启用细化权限时,操作可能有所不同.
表3.
在SAPASE中管理用户任务要求的角色命令或过程数据库、组或角色创建登录帐户系统安全员createloginmaster数据库改变登录帐户系统安全员例外情况是用户可以更改自己的口令和全名.
alterloginmaster数据库删除登录帐户系统安全员droploginmaster数据库创建组数据库所有者或系统管理员sp_addgroup用户数据库创建并指派角色系统安全员createrole、grantrolemaster数据库向数据库中添加用户和指派组数据库所有者或系统管理员sp_adduser用户数据库为用户授予其他数据库用户的别名数据库所有者或系统管理员sp_addalias用户数据库为组、用户或角色授予创建或访问数据库对象以及运行命令的权限数据库所有者、系统管理员、系统安全员或对象所有者grant用户数据库另请参见第8章,「细化权限」(第199页)登录名简介登录名定义用户用以访问SAPASE的名称和口令.
执行createlogin时,会向master.
dbo.
syslogins中添加行,将唯一的系统用户ID(suid)指派给新用户,并填入指定的属性信息.
当用户登录时,SAPASE会在安全性管理9syslogins中查找用户提供的名称和口令.
password列使用单向算法加密,因此不可读.
登录配置文件是由应用于一组登录帐户的属性组成的集合.
这些属性定义登录特征,如缺省角色或与绑定到配置文件的每个登录名相关联的登录脚本.
登录配置文件可节省系统安全管理员的时间,因为登录帐户的属性是在一个地方设置和管理的.
创建登录帐户使用createlogin添加新登录名.
只有系统安全员才能执行createlogin.
以下步骤讲述如何为特定服务器创建登录帐户以及为用户管理权限.
1.
系统安全员为新用户创建登录帐户.
2.
系统管理员或数据库所有者向数据库中添加用户或为组指派用户.
3.
系统安全员授予用户特定的角色.
4.
系统管理员、数据库所有者或对象所有者授予用户或组对特定命令和数据库对象的特定权限.
有关完整语法,请参见《参考手册:命令》中的"createlogin".
创建登录名时,syslogins的crdate列设置为当前时间.
syslogins中的suid列在服务器中唯一地标识每个用户.
不论用户正在使用什么数据库,用户的suid都保持不变.
始终将suid1指派给安装SAPASE时创建的缺省"sa"帐户.
其他用户的服务器用户ID是在每次执行createlogin时连续指派的整数.
下面的语句可为用户"maryd"建立一个帐户,口令为"100cents",使用缺省数据库(master)、缺省语言(us_english),且没有全名:createloginmarydwithpassword"100cents"由于口令以1开头,因此要用双引号引起来.
执行此语句后,"maryd"就可以登录到服务器.
除非特别授予该用户对master的访问权限,否则系统会自动将其作为master数据库的"guest"用户对待,只具有有限的权限.
下面的语句设置一个登录帐户"omar_khayyam"和口令"rubaiyat",并使"pubs2"成为此用户的缺省数据库:createloginomar_khayyamwithpasswordrubaiyatdefaultdatabasepubs2上次登录和管理不活动帐户管理和跟踪SAPASE帐户.
SAPASE通过以下方式为用户帐户提供安全性:跟踪创建日期.
第3章:管理SAPASE登录名和数据库用户10AdaptiveServerEnterprise记录帐户的上次登录时间.
确定哪些帐户由于不活动而过时并被锁定.
记录锁定帐户的原因、锁定帐户的时间,以及锁定帐户的用户的标识.
定义StalePeriodstaleperiod是登录配置文件的属性,指示允许登录帐户在因不活动而被锁定前保持不活动状态的持续时间.
如果登录配置文件tracklastlogin的属性未设置为0,并且不让登录帐户因不活动而被锁定,则会在登录过程或执行sp_locklogin的过程中检查syslogins.
lastlogindate和syslogins.
pwdate字段以确定是否不活动.
当登录帐户因不活动而被锁定时,syslogins中的locksuid、lockreason和lockdate字段将设置如下:lockreason的值locksuid的值帐户lockreason的说明4NULL帐户由于不活动而被自动锁定.
如果设置了高可用性解决方案,则syslogins.
lastlogindate和syslogins.
pwdate会在两个服务器上同步.
在一个服务器上锁定的登录帐户也会在协同服务器上锁定.
跟踪上次登录可以通过登录配置文件的tracklastlogin属性设置跟踪上次登录日期时间.
createloginprofilegeneral_lpwithtracklastlogintrueauthenticatewithASE防止不活动帐户被锁定可以使用exemptinactivelock子句将登录帐户设置为不因不活动而被锁定.
以下语句创建一个不因不活动而被锁定的登录帐户"user33".
createloginuser33withpasswordAT0u7gh9wdexemptinactivelocktrue登录的验证机制支持的验证机制有:ASE、LDAP、PAM、KERBEROS和ANY.
使用ANY时,SAPASE会检查是否存在定义的外部验证机制.
如果定义了外部验证机制,SAPASE会使用该机制,否则会使用ASE机制.
更改登录帐户使用alterlogin可添加、删除或更改登录名的属性及其相应的值.
使用alterlogin可以:添加或删除自动激活的角色第3章:管理SAPASE登录名和数据库用户安全性管理11更改口令更改登录配置文件关联更改或添加全名指定口令有效期和最小口令长度指定最大尝试失败次数指定验证机制指定缺省语言和缺省数据库调用登录脚本不锁定不活动的登录帐户系统管理员可以使用alterlogin来设置口令长度和有效期、限制失败登录尝试次数、删除属性,以及指定登录脚本在用户登录时自动运行.
执行alterlogin更改缺省数据库后,用户将在下次登录时连接到新的缺省数据库.
但alterlogin不会自动授予用户访问此数据库的权限.
除非使用sp_adduser、sp_addalias或guest用户机制对数据库所有者指派访问权限,否则即使其缺省数据库已经更改,用户也将被连接到master数据库.
下面的示例将登录帐户anna的缺省数据库更改为pubs2:alterloginannamodifydefaultdatabasepubs2下面的示例将claire缺省语言更改为法语:alterloginclairemodifydefaultlanguagefrench删除登录帐户命令droplogin通过删除master.
dbo.
syslogins中的用户条目删除用户登录名.
您无法删除是任何数据库中的用户的登录名;并且如果来自某一数据库的用户在该数据库中拥有任何对象或已将对对象的任何权限授予其他用户,您也无法删除该用户.
在创建下一登录帐户时,可以重用已删除的登录帐户的服务器用户ID(suid).
这种情况只有在所删除的登录帐户持有syslogins中最大的suid的情况下才会出现;不过,如果不对droplogin的执行情况进行审计,则会造成无法分清责任的情况.
您不能删除剩余的最后一个系统安全员的登录帐户或系统管理员的登录帐户.
withoverride子句删除登录名,即使有无法检查其有无登录引用的不可用数据库也是如此.
下面的示例删除登录帐户mikeb和rchin.
droploginmikeb,rchin请参见《参考手册:命令》以了解完整的droplogin语法.
第3章:管理SAPASE登录名和数据库用户12AdaptiveServerEnterprise选择和创建口令在添加用户时,系统安全员将使用createlogin为每个用户指派一个口令.
用户可使用alterlogin语句随时修改其口令.
创建口令时:不要使用诸如生日、街道名或其它任何与个人生活有关的单词或数字.
不要使用宠物或爱人的名字.
不要使用字典中出现的单词或反向拼写的单词.
最难猜的口令是那些组合了大小写字母和数字的口令.
绝不要将口令泄露给他人或记录在别人能看到的地方.
口令必须满足以下条件:长度至少为6个字符.
SAP建议使用8个字符或更长的口令.
包含任意可打印字母、数字或符号.
如果存在以下情况,则必须在createlogin中使用引号括起来:口令中包含A-Z、a-z、0-9、_、#、有效的单字节或多字节字母字符、变音字母字符以外的任何字符以数字0-9开头另请参见口令复杂程度检查(第18页)最大登录尝试次数设置允许的最大登录尝试次数可以防止"强制侵入"或以基于字典猜口令的方式尝试登录.
系统安全员可以指定允许的最大连续登录尝试次数,尝试指定次数后,登录名或角色将被自动锁定.
允许的失败登录尝试次数可以设置为适用于整个服务器或个别登录名和角色.
个别设置优先于服务器范围的设置.
失败的登录次数存储在master.
.
syslogins的logincount列中.
成功的登录可以将失败登录次数重置为0.
设置全服务器范围的MaximumFailedLogins使用sp_passwordpolicy为登录名和角色设置全服务器范围的最大登录失败次数.
缺省情况下,maximumfailedlogins处于禁用状态,不对口令应用此项检查.
要设置允许的登录失败次数,请输入:sp_passwordpolicy'set','maximumfailedlogins','number'请参见《参考手册:过程》中的"sp_passwordpolicy".
第3章:管理SAPASE登录名和数据库用户安全性管理13为特定登录名设置MaximumFailedLogins创建特定的登录名时设置最大登录失败次数.
要在创建特定的登录名时为其设置最大登录尝试失败次数,请使用createlogin.
此示例新建口令为"Djdiek3"的登录名"joe",并将最大尝试登录失败次数设置为3:createloginjoewithpasswordDjdiek3maxfailedattempts3请参见《参考手册:命令》中的"createlogin".
为特定角色设置MaximumFailedLogins创建特定的角色时设置最大登录失败次数.
要在创建特定角色时设置maximumfailedlogins,请使用createrole.
此示例创建口令为"temp244"的"intern_role",并将"intern_role"的maximumfailedlogins设置为20:createroleintern_rolewithpasswd"temp244",maxfailed_logins20请参见《参考手册:命令》中的"createrole".
更改特定登录名的MaximumFailedLogins更改特定登录名的最大登录失败次数.
使用alterlogin设置或更改现有登录名的maximumfailedlogins.
此示例将登录名"joe"的maximumfailedlogins更改为40:alterloginjoemodifymaxfailedattempts40更改特定角色的MaximumFailedLogins更改特定角色的最大登录失败次数.
使用alterrole设置或更改现有角色的maximumfailedlogins.
此示例将"physician_role"的允许maximumfailedlogins更改为5:alterrolephysician_rolesetmaxfailed_logins5此示例删除所有角色的maximumfailedlogins的替换值:alterrole"alloverrides"setmaxfailed_logins-1有关使用maxfailed_logins的语法和规则的详细信息,请参见《参考手册:命令》中的"alterrole".
在丢失口令后登录可以使用dataserver-p重新设置sa_role和sso_role的口令.
使用dataserver-plogin_name参数可以在服务器启动时指定系统安全员或系统管理员的名称.
如果无法恢复丢失的口令,则使用这种方法可以为这些帐户设置新口令.
第3章:管理SAPASE登录名和数据库用户14AdaptiveServerEnterprise使用-p参数启动时,SAPASE会生成一个随机口令,接着显示并加密该口令,然后将其作为该帐户的新口令保存在master.
.
syslogins中.
如果sa_role没有口令,且使用-psa_role启动,则错误日志中将显示一条错误消息.
SAP强烈建议您在重新启动服务器时更改登录名或角色的口令.
如果丢失了这些角色中任一角色的口令,而这些角色需要口令才能变为活动状态,请使用dataserver-p.
例如,如果使用以下命令启动服务器:xml:space="preserve">dataserver-psa_role将显示消息:xml:space="preserve">Newpasswordforrole'sa_role':qjcdyrbfkxgyc0显示登录名的口令信息使用sp_displaylogin显示登录名的口令信息.
要显示登录名的登录名和口令设置,请输入:sp_displaylogin[loginame[,expand_up|expand_down]]此示例显示有关绑定到登录配置文件的登录名joe的信息:sp_displayloginjoeSuid:3Loginame:joeFullname:JoeWilliamsConfiguredAuthorization:sa_role(defaultON)sso_role(defaultON)oper_role(defaultON)Locked:NODateofLastPasswordChange:Sep2220083:50PMPasswordexpirationinterval:0Passwordexpired:NOMinimumpasswordlength:6Maximumfailedlogins:1Currentfailedloginattempts:2Authenticatewith:ANYLoginProfile:emp_lp此示例显示有关未绑定到登录配置文件的登录名joe的信息:sp_displayloginjoeSuid:3Loginame:joeFullname:DefaultDatabase:masterDefaultLanguage:AutoLoginScript:ConfiguredAuthorization:Locked:NO第3章:管理SAPASE登录名和数据库用户安全性管理15DateofLastPasswordChange:Sep2220083:50PMPasswordexpirationinterval:0Passwordexpired:NOMinimumpasswordlength:6Maximumfailedlogins:1Currentfailedloginattempts:2Authenticatewith:ANYLoginPasswordEncryption:SHA-256Lastlogindate:Sep18200810:48PM请参见《参考手册:过程》中的"sp_displaylogin".
显示角色的口令信息使用sp_displayroles显示登录名的口令信息要显示角色的登录名和口令设置,请输入:sp_displayroles[grantee_name[,mode]]此示例显示有关physician_role角色的信息:sp_displayrolesphysician_role,"display_info"Rolename=physician_roleLocked:NODateofLastPasswordChange:Nov2419973:35PMPasswordexpirationinterval=5Passwordexpired:NOMinimumpasswordlength=4Maximumfailedlogins=10Currentfailedlogins=3请参见《参考手册:过程》中的"sp_displayroles".
检查口令中是否至少包含一个数字系统安全员可以指示服务器使用全服务器范围的配置参数checkpasswordfordigit,来检查口令中是否至少包含一个数字.
如果设置了此参数,并不会影响现有的口令.
缺省情况下,数字检查是关闭的.
激活是否包含一个数字的检查要激活检查口令功能,请输入:sp_configure"checkpasswordfordigit",1停用是否包含一个数字的检查要停用检查口令功能,请输入:sp_configure"checkpasswordfordigit",0请参见《参考手册:过程》中的"sp_configure".
第3章:管理SAPASE登录名和数据库用户16AdaptiveServerEnterprise设置和更改MinimumPasswordLength可配置的口令可用于自定义口令来适应需要,例如使用四位个人标识号(PIN)或口令为NULL的匿名登录名.
注意:SAPASE为minimumpasswordlength使用缺省值6.
SAP建议您对此参数使用的值不小于6.
系统安全员可指定:全局强制的minimumpasswordlength每个登录名或每个角色的minimumpasswordlength每个登录名或每个角色的值将替换全服务器范围的值.
设置minimumpasswordlength只会影响设置该值后新创建的口令.
为特定登录名设置MinimumPasswordLength使用createlogin在创建特定登录名时设置minimumpasswordlength.
例如:这将新建口令为"Djdiek3"的登录名"joe",并将"joe"的minimumpasswordlength设置为8:createloginjoeDjdiek3withpassword@minpwdlenminpasswordlength8请参见《参考手册:命令》中的"createlogin".
为特定角色设置MinimumPasswordLength使用createrole在创建特定角色时设置minimumpasswordlength.
例如:这将创建一个口令为"temp244"的新角色"intern_role",并将"intern_role"的minimumpasswordlength设置为0:createroleintern_rolewithpasswd"temp244",minpasswdlength0原口令为7个字符,但由于minpasswdlength设置为0,因此该口令可更改为任意长度.
请参见《参考手册:命令》中的"createrole".
更改特定登录名的MinimumPasswordLength使用alterlogin设置或更改现有登录名的minimumpasswordlength.
例如:这会将登录名"joe"的minimumpasswordlength更改为8个字符.
alterloginjoemodifyminpasswordlength8请参见《参考手册:命令》中的"alterlogin".
第3章:管理SAPASE登录名和数据库用户安全性管理17更改特定角色的MinimumPasswordLength使用alterrole设置或更改现有角色的minimumpasswordlength.
例如:这会将现有角色"physician_role"的最小长度设置为5个字符:alterrolephysician_rolesetminpasswdlength5这将替换所有角色的minimumpasswordlength:alterrole"alloverrides"setminpasswdlength-1请参见《参考手册:命令》中的"alterrole".
删除特定登录名的MinimumPasswordLength使用alterlogin删除现有登录名的minimumpasswordlength.
例如:这将删除登录名"joe"的所有minimumpasswordlength限制:alterloginjoemodifydropminpasswordlength请参见《参考手册:命令》中的"alterlogin".
口令复杂程度检查您可以使用sp_passwordpolicy激活口令复杂程度检查.
可以在存储过程接口中使用这些支持口令复杂程度检查的选项;它们的值存储在master.
dbo.
sysattributes表中.
激活或停用口令复杂程度检查登录口令复杂程度检查可扩展到角色口令.
若要禁用某个单独选项,请输入:sp_passwordpolicy'clear',option若要禁用所有口令策略选项,请输入:sp_passwordpolicy'clear'请参见《参考手册:过程》以了解完整的sp_passwordpolicy语法.
不允许使用简单口令使用disallowsimplepassword检查口令中是否包含了作为子字符串的登录名.
可将disallowsimplepassword设置为:0-(缺省值)禁用该选项,并允许简单口令.
1–启用该选项,并不允许使用简单口令.
要设置该选项,可输入:第3章:管理SAPASE登录名和数据库用户18AdaptiveServerEnterprisesp_passwordpolicy'set','disallowsimplepasswords','1'自定义口令复杂程度检查您可以使用sp_extrapwdchecks和sp_cleanpwdchecks来自定义配置口令检查规则.
这两个存储过程在master数据库中定义并位于该数据库中,分别在进行口令复杂程度检查期间和删除登录名时自动调用.
指定口令中的字符使用sp_passwordpolicy参数来指定口令中字符(数字、大小写字符等)的最小数目.
mindigitsinpassword–口令中数字的最小数目.
缺省为禁用.
有效值为:0到16–口令中必须包含的最小数字数目.
-1–口令中不能包含数字.
minalphainpassword–口令中允许包含的字母字符的最小数目.
该值不得小于大写字母最小数目与小写字母最小数目的和.
缺省为禁用.
有效值为:0到16–口令中需要包含的特殊字符的最小数目.
-1–口令中不能包含特殊字符.
minspecialcharinpassword–口令中特殊字符的最小数目.
有效值为:0到16–口令中需要包含的特殊字符的最小数目.
-1–口令中不能包含特殊字符.
minuppercharinpassword–口令中大写字母的最小数目.
缺省为禁用.
有效值为:0到16–口令中需要包含的大写字母的数目.
-1–口令中不能包含大写字母.
minlowercharinpassword–口令中小写字母的最小数目.
有效值为:0到16–口令中需要包含的大写字母的数目.
-1–口令中不能包含大写字母.
minimumpasswordlength–口令的最小长度.
可将口令最小长度设置为0到30.
所指定的值必须至少为其它所有最小要求的总和.
例如,如果已经进行了如下设置,则必须至少将minimumpasswordlength设置为10:minimumdigitsinpassword设置为3minimumspecialcharactersinpassword设置为2minimumuppercasecharactersinpassword设置为2minimumlowercasecharactersinpassword设置为3passwordexpiration–口令到期之前可以使用多少天.
指定的值将在全局范围内生效.
缺省为禁用.
有效值为:0–口令永不过期.
1到32767–口令到期之前可以使用的天数.
passwordexpwarninterval–系统将在口令到期之前多少天显示口令有效期警告消息.
这些消息将在每次成功登录时显示,直到更改了口令或口令到期.
该值必须小于或等于口令有效期天数.
缺省为禁用.
第3章:管理SAPASE登录名和数据库用户安全性管理19有效值为0到365.
maximumfailedlogins–指定失败登录的最大次数,在此次数之后登录名将被锁定.
在全局范围内指定此值.
缺省为禁用.
有效值为:0–无论登录失败多少次,始终不锁定登录名.
1到32767–允许的失败登录次数,在此次数之后登录名将被锁定.
expirelogin用于在系统安全员创建或重置登录名时将登录名状态更改为已到期.
这样,在首次登录时即需要为登录名更改口令.
缺省为禁用.
有效值为:0–新登录名或重置的登录名将不到期.
1–新登录名或重置的登录名到期;您必须在首次登录时重置口令.
请参见《参考手册:过程》中的"sp_passwordpolicy".
口令复杂程度选项交叉检查某些口令复杂程度选项相互影响.
minimumpasswordlength不得小于mindigitsinpassword、minalphainpassword与minspecialcharactersinpassword的总和.
minalphainpassword不得小于minuppercharinpassword与minlowercharinpassword的总和.
systemwidepasswordexpiration必须大于passwordexpwarninterval.
为了进行上述交叉检查,如果SAPASE遇到的口令复杂程度选项值为-1,则它会将该选项的值解释为0.
如果未设置某个选项,SAPASE也会将该选项的值解释为0.
SAPASE将对每个不满足交叉检查的新口令复杂程度选项输出警告消息.
不过,选项的设置仍然是成功的.
设置口令复杂程度检查在登录名级别使用createlogin或alterlogin设置口令复杂程度选项.
在全局级别使用sp_passwordpolicy或sp_configure设置口令复杂程度选项.
用于验证的口令检查和策略使用sp_configure指定的配置参数使用sp_passwordpoli-cy指定的口令复杂程度选项使用alterlogin指定的每个登录名替换值口令有效期system-widepasswordexpirationsystem-widepasswordex-pirationpasswordexpi-ration口令中包含的数字checkpasswordfordigitmindigitsinpassword无口令中包含的字母字符无minalphainpassword无口令长度minimumpasswordlengthminimumpasswordlengthminpasswdlength失败登录的锁定maximumfailedloginsmaximumfailedloginsmaxfailedat-tempts第3章:管理SAPASE登录名和数据库用户20AdaptiveServerEnterprise用于验证的口令检查和策略使用sp_configure指定的配置参数使用sp_passwordpoli-cy指定的口令复杂程度选项使用alterlogin指定的每个登录名替换值不允许使用简单口令无disallowsimplepass-words无口令中包含的特殊字符无minspecialcharinpass-word无口令中包含的大写字母无minuppercharinpass-word无口令中包含的小写字母无minlowercharinpass-word无口令有效期警告间隔无passwordexpwarninter-val无首次登录时重置口令无expirelogin无自定义口令复杂程度检查无无无由于设置的口令配置选项既可能是全局范围的,也可能是特定于每个登录名的,因此应用的口令选项所依照的优先级顺序非常重要.
应用口令选项时,优先级顺序为:1.
每个登录名的现有参数2.
口令复杂程度选项3.
现有全局口令选项示例1创建新的登录名,并将"johnd"的minimumpasswordlength设置为6:createloginjohndwithpasswordcomplex_passwordminpasswordlength'6'登录名"johnd"的这些全局选项为登录名"johnd"创建两个minimumpasswordlength要求,并设置有关口令中的数字的限制:sp_configure'minimumpasswordlength','8'sp_configure'checkpasswordfordigit','true'sp_passwordpolicy'set','mindigitsinpassword','2'如果之后尝试改变登录名"johnd"的口令:alterloginjohndwithpasswordcomplex_passwordmodifypassword'abcd123'将按照以下顺序对口令进行检查:第3章:管理SAPASE登录名和数据库用户安全性管理211.
每个登录名的现有选项检查:minimumpasswordlength必须大于6.
由于符合上述情况,因此通过检查.
2.
新选项:口令中的数字数目必须大于2.
由于符合上述情况,因此通过检查.
3.
现有全局选项:不检查此处指定的minimumpasswordlength,因为已经对登录名"johnd"进行了特定于每个登录名的检查.
4.
checkpasswordfordigit选项是冗余的,因为在打开数字的最小数目选项并设为2时,即已经对checkpasswordfordigit选项进行了检查.
按指定顺序执行完这些检查之后,登录名"johnd"的新口令通过了这些检查,从而成功更改了口令.
示例2如果为用户"johnd"输入以下内容,则SAPASE首先会检查每个登录名的现有选项,确定minimumpasswordlength设置为6,而您尝试将口令改为仅使用4个字符:alterloginjohndwithpasswordcomplex_passwordmodifypasswordabcd检查失败,并会显示一条错误消息.
在一个口令复杂程度检查失败后,将不再对其它选项进行检查.
示例3使用以下口令配置选项创建新登录名,并将登录名johnd的minimumpasswordlength设置为4:createloginjohndwithpasswordcomplex_passwordminpasswordlength4这是每个登录名的现有选项.
如果添加以下内容,则会创建口令中必须至少包含1个数字的全局要求:sp_passwordpolicy'set','mindigitsinpassword','1'如果之后尝试改变登录名johnd的口令,如下所示:alterloginjohndwithpasswordcomplex_passwordmodifypasswordabcde将按照以下顺序执行这些检查:1.
每个登录名的现有选项检查:新口令的minimumpasswordlength为4.
口令"abcde"长度大于4,因此通过检查.
2.
新的全局要求检查:口令中所包含数字的最小数目已全局设置为1.
该检查失败.
口令未更改并会显示一条错误消息.
要改变口令,必须通过所有检查.
第3章:管理SAPASE登录名和数据库用户22AdaptiveServerEnterprise启用自定义口令检查系统安全员可以编写启用自定义口令检查的用户定义存储过程.
要实现口令历史记录检查,可以创建一个新的用户表来存储口令历史记录:createtablepwdhistory(namevarchar(30)notnull,--Loginname.
passwordvarbinary(30)notnull,--oldpassword.
pwdatedatetimenotnull,--datetimechanged.
changedbyvarchar(30)notnull--Whochanged.
)go创建一个新的存储过程master.
dbo.
sp_extrapwdchecks,它可以加密形式将之前使用过的口令保存在pwdhistory表中,且不允许重复使用用过的口令.
当执行createlogin或alterlogin…modifypassword时,将自动调用sp_extrapwdchecks用户定义存储过程.
以下是执行sp_extrapwdchecks的示例:createprocsp_extrapwdchecks(@caller_passwordvarchar(30)=NULL,--thecurrentpasswordofcaller@new_passwordvarchar(30),--thenewpasswordofthetargetacct@loginamevarchar(30)=NULL--usertochangepasswordon)asbegindeclare@current_timedatetime,@encrypted_old_pwdvarbinary(30),@encrypted_new_pwdvarbinary(30),@saltvarchar(8),@changedbyvarchar(30),@cutoffdatedatetimeselect@changedby=suser_name()select@salt=null--NOTE:caller_passwordand/orloginameargumentscanbenull.
--Inthesecases,passwordhistorychecksshouldbeskipped.
--@loginameisnullwhenSSOcreatesanewloginaccount--using"createlogin"command.
--@caller_passwordisnullwhen--1.
SSOcreatesanewloginaccountusing--"createlogin"command.
--2.
SSOmodifiestheloginaccount'spasswordusing--"alterlogin…modifypassword"command.
--Businesslogicforcustompasswordchecksshouldbe--implementedhere.
第3章:管理SAPASE登录名和数据库用户安全性管理23--Ifthereisnoneedtomaintainpasswordhistory,return--fromhere.
if(@loginameisNULL)beginreturn0end--Changethislineaccordingtotheneedsofyourinstallation.
--Thischecksbelowkeephistoryof12monthsonly.
select@current_time=getdate(),@cutoffdate=dateadd(month,-12,getdate())deletemaster.
.
pwdhistorywherename=@loginameandpwdatesp_displayloginlogin9932>goSuid:70Loginame:login933Fullname:DefaultDatabase:masterDefaultLanguage:AutoLoginScript:ConfiguredAuthorization:Locked:NODateofLastPasswordChange:Apr2020072:55PMPasswordexpirationinterval:0Passwordexpired:NOMinimumpasswordlength:0Maximumfailedlogins:3Currentfailedloginattempts:Authenticatewith:ANYLoginPasswordEncryption:SYB-PROPLastlogindate:(returnstatus=0)第3章:管理SAPASE登录名和数据库用户32AdaptiveServerEnterprise值SYB-PROP来自行LoginPasswordEncryption:SYB-PROP中,它指示此帐户仅使用Sybase专有加密.
此登录名在升级到15.
0.
2和更高版本之前尚未使用过,并且,如果执行了sp_passwordpolicy'set','allowpassworddowngrade','0',将锁定此登录名并重置其口令.
升级到15.
0.
2后首次登录到帐户之后,此行将改为显示同时使用了新旧两种加密:LoginPasswordEncryption:SYB-PROP,SHA-256这是所有活动的登录帐户的预期状态,因此执行sp_passwordpolicy'set','allowpassworddowngrade','0'不会锁定帐户和重置帐户的口令.
执行sp_passwordpolicy'set','allowpassworddowngrade','0'之后,将只会使用SHA-256加密,并且您将看到:LoginPasswordEncryption:SHA-256显示此值的登录帐户现在使用更强大的磁盘上加密算法.
当所有口令都更改为使用新的算法时,重新执行sp_passwordpolicy将不会显示重置或锁定的帐户:1>sp_passwordpolicy'set','allowpassworddowngrade','0'2>goOldpasswordencryptionalgorithmusageeliminatedfrom0loginaccounts,changesarecommitted.
(returnstatus=0)示例2此示例中,1000个登录帐户中有990个都已过渡到SHA-256算法,但有10个帐户仍在使用SYB-PROP算法:1>sp_passwordpolicy'set','allowpassworddowngrade','0'2>goOldpasswordencryptionalgorithmfoundforloginnamelogin1000,suid3,ver1=5,ver2=0,resettingpasswordtoEcJxKmMvOrDsC4Oldpasswordencryptionalgorithmfoundforloginnamelogin999,suid4,ver1=5,ver2=0,resettingpasswordtoMdZcUaFpXkFtM1Oldpasswordencryptionalgorithmfoundforloginnamelogin998,suid5,ver1=5,ver2=0,resettingpasswordtoZePiZdSeMqBdE6Oldpasswordencryptionalgorithmfoundforloginnamelogin997,suid6,ver1=5,ver2=0,resettingpasswordtoIfWpXvGlBgDgW7Oldpasswordencryptionalgorithmfoundforloginnamelogin996,suid7,ver1=5,ver2=0,resettingpasswordtoJhDjYnGcXwObI8Oldpasswordencryptionalgorithmfoundforloginnamelogin995,suid8,ver1=5,ver2=0,resettingpasswordtoQaXlRuJlCrFaE6第3章:管理SAPASE登录名和数据库用户安全性管理33Oldpasswordencryptionalgorithmfoundforloginnamelogin994,suid9,ver1=5,ver2=0,resettingpasswordtoHlHcZdRrYcKyB2Oldpasswordencryptionalgorithmfoundforloginnamelogin993,suid10,ver1=5,ver2=0,resettingpasswordtoUvMrXoVqKmZvU6Oldpasswordencryptionalgorithmfoundforloginnamelogin992,suid11,ver1=5,ver2=0,resettingpasswordtoIxIwZqHxEePbX5Oldpasswordencryptionalgorithmfoundforloginnamelogin991,suid12,ver1=5,ver2=0,resettingpasswordtoHxYrPyQbLzPmJ3Oldpasswordencryptionalgorithmusageeliminatedfrom10loginaccounts,changesarecommitted.
(returnstatus=1)注意:将向执行过程的管理员显示登录名、suid和生成的口令.
此命令的输出表明所有10个未过渡的帐户都被重新设置(并锁定).
在升级并随之降级后保留口令加密如果升级到SAPASE15.
0.
2或更高版本,然后降级到某个较低的版本,请使用sp_downgrade以保留并使用15.
0.
2及更高版本服务器中的口令加密功能.
缺省情况下,可在升级之后降级口令,直到结束口令降级阶段为止.
如果运行sp_downgrade,关闭服务器,然后重新启动您从其降级的SAPASE的同一版本,则会删除sp_downgrade所做的更改.
必须重新运行sp_downgrade才能重复更改.
有关运行sp_downgrade的信息,请参见《安装指南》.
在升级之前增加空间master数据库和事务日志需要额外的空间.
使用alterdatabase为master数据库和事务日志增加额外的空间.
加密算法和口令策略:将syslogins所需的空间增加大约30%.
将每个登录帐户的最大行长度增加135个字节.
在SAPASE15.
0.
1版和15.
0.
2版间,将每页行数的比例从每2K页16行降低到每2K页12行.
在降级过程中有一段时间allowpassworddowngrade的值为1(此时同时使用了新旧两种口令加密算法);该比率会进一步降低到每2K页大约10行.
例如,如果15.
0.
1版有1,000个登录帐户,数据适合59页,则同样数目的登录帐户在15.
0.
2版新的master数据库上可能另外需要大约19页;或者,如果从15.
0.
1升级(allowpassworddowngrade设置为1),则另外需要33页.
对于更新的password列,事务日志需要额外的空间.
用户第一次登录时,每1,000个登录大约需要829个2K页,而对于用户在升级和降级过程中进行的口令更改,则需要每1,000个登录大约343页.
若要确保有足够的日志空间,在开始口令升级或降低之前,以及在用户第一次登录到SAPASE15.
0.
2和更高版本时,请验证每个登录有大约一个2K页的可用日志空间.
第3章:管理SAPASE登录名和数据库用户34AdaptiveServerEnterprise降级SAPASE支持从15.
0.
2或更高版本降级到15.
0或15.
0.
1版.
如果要降级到更低版本,则可能需要执行额外的操作.
如果allowpassworddowngrade为0或NULL,或者,如果口令已仅使用SHA-256算法存储在syslogins中,请对登录帐户使用sp_displaylogin以确定使用了哪种算法,或使用sp_downgrade"prepare"以确定重置了哪些帐户.
prepare选项报告服务器是否已准备好降级.
如果prepare选项失败,它将报告必须修复的错误.
如果在修复错误之前在服务器上执行降级,则降级将失败.
对于登录口令,prepare将报告在降级过程中重置了哪些口令.
运行sp_downgrade"prepare",验证您是否应运行sp_downgrade:sp_downgrade'prepare','15.
0.
1',1Checkingdatabasesfordowngradereadiness.
Therearenoerrorswhichinvolveencryptedcolumns.
Allowpassworddowngradeissetto0.
Loginpasswordsmaybereset,ifoldencryptionversionofpasswordisnotpresent.
Warning:Newpasswordencryptionalgorithmfoundforloginnameuser103,suid103.
Passwordwillberesetduringthedowngradephase.
sp_downgrade'prepare'completed.
(returnstatus=0)droploginprobe如果该登录名在数据库中有用户条目,请从master数据库中删除用户,然后删除该登录名:usemastersp_dropuser'probe'对降级的服务器运行installmaster时,会重新创建probe登录名.
执行sp_downgrade之前,SAP建议删除syslogins和syssrvroles的统计信息.
这样做可避免在降级过程中记录sysstatistics中的无效列信息,例如口令列的长度.
若要删除syslogins和syssrvroles的统计信息,请输入:deletestatisticsmaster.
.
sysloginsdeletestatisticsmaster.
.
syssrvroles在此示例中,执行sp_downgrade将会锁定并重置user103的登录口令.
SAPASE生成的随机口令仅对执行sp_downgrade的客户端显示.
管理员可以将此输出重定向第3章:管理SAPASE登录名和数据库用户安全性管理35到文件,以便保留这些口令;管理员也可以在降级完成并且服务器重新启动后手动重置这些口令.
sp_downgrade'downgrade','15.
0.
1',1Checkingdatabasesfordowngradereadiness.
Therearenoerrorswhichinvolveencryptedcolumns.
Allowpassworddowngradeissetto0.
Loginpasswordsmaybereset,ifoldencryptionversionofpasswordisnotpresent.
Warning:Newpasswordencryptionalgorithmfoundforloginnameuser103,suid103.
Passwordisresetduringthedowngradephase.
Executingdowngradestep1[sp_passwordpolicy'downgrade']for:-Database:master(dbid:1)Newpasswordencryptionalgorithmfoundforloginnameuser103,suid103.
Resettingpasswordto'ZdSuFpNkBxAbW9'.
Totalnumberofpasswordsresetduringdowngrade=1[.
.
.
outputfromotherdowngradesteps.
.
](returnstatus=0)错误日志中将出现其它消息,标识在sp_downgrade过程中进行的步骤:00:00000:00006:2007/05/2105:34:07.
81serverPreparingASEdowngradefrom1502to1501.
00:00000:00006:2007/05/2105:35:59.
09serverPreparingASEdowngradefrom1502to1501.
00:00000:00006:2007/05/2105:35:59.
19serverStartingdowngradingASE.
00:00000:00006:2007/05/2105:35:59.
20serverDowngrade:Downgradingloginpasswords.
00:00000:00006:2007/05/2105:35:59.
22serverDowngrade:Startingpassworddowngrade.
00:00000:00006:2007/05/2105:35:59.
23serverDowngrade:Removedsysattributesrows.
00:00000:00006:2007/05/2105:35:59.
23serverDowngrade:Updated1passwords.
00:00000:00006:2007/05/2105:35:59.
24serverDowngrade:Removedcolumnsinsyslogins-lastlogindate,crdate,locksuid,lockreason,lockdateareremoved.
00:00000:00006:2007/05/2105:35:59.
26serverDowngrade:Truncatedpasswordlengths.
00:00000:00006:2007/05/2105:35:59.
28serverDowngrade:Successfullycompletedpassworddowngrade.
00:00000:00006:2007/05/2105:35:59.
28serverDowngrade:Markingstoredprocedurestoberecreatedfromtext.
00:00000:00006:2007/05/2105:36:03.
69serverDowngrade:Dropping第3章:管理SAPASE登录名和数据库用户36AdaptiveServerEnterpriseSysoptionssystemtable.
00:00000:00006:2007/05/2105:36:03.
81serverDowngrade:Settingmasterdatabaseminorupgradeversion.
00:00000:00006:2007/05/2105:36:03.
83serverDowngrade:Settinguserdatabasesminorupgradeversion.
00:00000:00006:2007/05/2105:36:03.
90serverASEdowngradecompleted.
sp_downgrade更改目录并修改口令数据.
服务器必须为单用户模式,才能成功执行sp_downgrade.
若要以单用户模式启动服务器并仅允许系统管理员登录,请使用-m命令行选项来启动服务器.
运行sp_downgrade之后,请关闭15.
0.
2服务器,以避免新的登录或者其它可能修改数据或系统目录的操作.
如果在运行sp_downgrade之后重新启动AdaptiveServer15.
0.
2版,则较低的版本将关闭,并且您将再次升级到15.
0.
2版或更高级别.
当allowpassworddowngrade设置为0时,口令会到期在口令降级阶段结束时,使syslogins中的口令到期.
要将登录口令配置为到期,请使用:sp_passwordpolicy"expireloginpasswords"[,"[loginame|wildcard]"若要将角色口令配置为到期,请使用:sp_passwordpolicy"expirerolepasswords"[,"[rolename|wildcard]"要将旧登录名口令配置为到期,请使用:sp_passwordpolicy"expirestaleloginpasswords","datetime"要将旧角色口令配置为到期,请使用:sp_passwordpolicy"expirestalerolepasswords","datetime"当您执行命令时,自sp_passwordpolicy"expirestaleloginpasswords,"的datetime参数中所设置日期以来未更改的口令将到期.
当口令降级阶段结束时,将自动要求用户更改其口令.
也可以锁定旧登录名或角色;但是,这将要求您手动重置口令,以使合法用户可以再次访问其登录帐户.
显示allowpassworddowngrade的当前值获取allowpassworddowngrade的当前值.
若要获取allowpassworddowngrade的当前值,请输入:sp_passwordpolicy'list','allowpassworddowngrade'结果集包括当前值及说明其意义的消息.
第3章:管理SAPASE登录名和数据库用户安全性管理37如果已升级master数据库,并且要采用新旧两种编码保留口令,则结果为:sp_passwordpolicy'list','allowpassworddowngrade'govaluemessage1Passworddowngradeisallowed.
(1rowaffected)对于仅使用新口令加密的升级master数据库,此结果为:sp_passwordpolicy'list','allowpassworddowngrade'govaluemessage0LastPassworddowngradewasallowedon.
(1rowaffected)对于AdaptiveServer15.
0.
2上仅使用新口令加密的新master数据库,此结果为:sp_passwordpolicy'list','allowpassworddowngrade'govaluemessageNULLNewmasterdatabase.
(1rowaffected)高可用性环境中的口令口令安全性影响高可用性的配置和syslogins中的口令在主服务器和协同服务器之间的行为.
在您针对高可用性配置主服务器和协同服务器之前,这些服务器必须具有相同的allowpassworddowngrade值.
allowpassworddowngrade的quorum属性检查allowpassworddowngrade的值在主服务器和辅助服务器上是否相同.
如果主服务器上的allowpassworddowngrade为1,在辅助服务器上为0,则sp_companion的输出为:1>sp_companion"primary_server",configure2>goStep:AccessverifiedfromServer:'secondary_server'toServer:'primary_server'.
Step:AccessverifiedfromServer:'primary_server'toServer:'secondary_server'.
Msg18836,Level16,State1:Server'secondary_server',Procedure'sp_companion',Line392:Configurationoperation'configure'cannotproceedduetoQuorumAdvisoryCheckfailure.
Pleaserun'do_advisory'commandtofindtheincompatibleattributeandfixit.
第3章:管理SAPASE登录名和数据库用户38AdaptiveServerEnterpriseAttributeNameAttribTypeLocalValueRemoteValueAdvisory--------allowpassworddowngallowpassword012(1rowaffected)(returnstatus=1)Advisory列中的值2表示:除非两个协同服务器上的值相同,否则用户不能进行集群操作.
sp_companiondo_advisory还会列出两个服务器上allowpassworddowngrade值的差异.
在主服务器和辅助服务器上单独运行sp_passwordpolicy'allowpassworddowngrade'以同步值,并确保这两个服务器的状态相同.
升级后更新的口令在针对高可用性进行升级和配置后,第一次连接到主服务器时,在具有相同磁盘上加密格式的主服务器和协同服务器上,用户登录口令将同步.
这样可以避免在allowpassworddowngrade阶段结束且口令降级到较低版本的SAPASE时出现口令重置或锁定情况.
无需被sp_passwordpolicy或sp_downgrade重置或锁定,就可以继续使用登录口令.
成功设置高可用性环境后,请分别在主服务器和协同服务器上结束allowpassworddowngrade阶段.
同样,要降级到较低版本,请分别在主服务器和协同服务器上执行sp_downgrade.
建立口令和登录策略提供几个控件用来设置登录名、角色和口令的策略以进行内部验证.
系统安全员可以:指定在某个登录名或角色被自动锁定前,为该登录名或角色键入无效口令的最大允许次数在丢失口令后登录手动记录和解锁登录名和角色显示登录口令信息指定服务器范围或特定登录名或角色所需的minimumpasswordlength检查登录名的口令复杂程度启用登录名的自定义口令检查设置口令有效期第3章:管理SAPASE登录名和数据库用户安全性管理39考虑登录口令字符集锁定不活动的登录帐户在高可用性环境中使用口令登录失败用户必须验证成功,才能访问数据.
如果验证尝试失败,将返回以下消息并终止网络连接:isql-Ubob-PbadpassMsg4002,Level14,State1:Server'ACCOUNTING'Loginfailed.
CT-LIBRARYerror:ct_connect():protocolspecificlayer:externalerror:Theattempttoconnecttotheserverfailed此消息是常规登录失败消息,它不会通知进行连接的用户失败是由错误的用户名还是由错误的口令导致.
尽管客户端显示登录失败常规消息的目的是为了避免向恶意用户提供信息,但系统管理员可能会发现,失败的原因对于检测入侵尝试和诊断用户验证问题十分重要.
在sysaudits.
extrainfo列的OtherInformation部分的Errornumber.
Severity.
State中提供了登录失败原因.
登录失败审计具有事件编号45和eventmod2.
将sp_auditlogin参数设置为on或fail以启用登录失败审计:sp_audit"login","all","all","fail"sp_audit"login","all","all","on"锁定登录帐户和角色若要防止某个用户登录到SAPASE服务器,可以锁定或删除登录帐户.
锁定登录帐户可以保留suid以使其无法重新使用.
执行sp_locklogin以锁定登录帐户当登录帐户因登录尝试次数已达到所配置的maximumfailedlogin值而遭到锁定时,会在login_locked审计选项下生成具有审计事件AUD_EVT_LOGIN_LOCKED(112)的审计记录.
警告!
在创建下一个登录帐户时,SAPASE可能会重新使用已删除的登录帐户的服务器用户ID(suid).
只有在所删除的登录帐户持有syslogins中最大的suid时才会出现这种情况;不过,如果不对droplogin的执行情况进行审计,则会造成无法第3章:管理SAPASE登录名和数据库用户40AdaptiveServerEnterprise分清责任.
此外,带有重新使用的suid的用户能够访问授权给旧suid的数据库对象.
不能在以下情况下删除登录:用户位于任何数据库中.
登录是最后一个保留下来的用户,该用户拥有系统安全员或系统管理员角色.
系统安全员可以使用sp_locklogin或droplogin锁定或删除登录名.
如果为复制记录了系统过程,则系统安全员在发出命令时必须位于master数据库中.
锁定和解锁登录名和角色使用sp_locklogin可以锁定和解锁登录名和帐户,还可以显示锁定帐户的列表.
只有系统安全员才能使用sp_locklogin.
以下情况中可以锁定登录名:口令到期,或达到最大登录尝试失败次数,或系统安全员手动将其将锁定,或帐户因不活动而被锁定语法为:sp_locklogin[{login_name},{"lock"|"unlock"}]其中:login_name是要被锁定或解锁的帐户的名称.
登录名必须是一个已存在的有效帐户.
all表示锁定或解锁所有登录帐户,具有sa_role的帐户除外.
lock|unlock指定是要锁定还是要解锁帐户.
系统安全员可使用sp_locklogin手动锁定或解锁登录名.
例如:sp_locklogin"joe","lock"sp_locklogin"joe","unlock"有关登录锁定状态的信息存储在syslogins的status列中.
显示锁定登录若要显示所有锁定登录的列表,请使用不带参数的sp_locklogin.
可以锁定当前已登录的帐户,但用户在注销之前不会受帐户锁定的影响.
可以锁定数据库所有者的帐户,并且锁定的帐户也可以拥有数据库中的对象.
此外,可以使用sp_changedbowner将某个锁定的帐户指定为数据库所有者.
始终至少要有一个未锁定的系统安全员帐户和一个未锁定的系统管理员帐户.
有关登录锁定状态的信息存储在syslogins的status列中.
第3章:管理SAPASE登录名和数据库用户安全性管理41请参见《参考手册:过程》中的"sp_locklogin".
使用syslogins跟踪帐户是否已锁定syslogins包含用于跟踪锁定帐户相关信息的列.
syslogins包含lastlogindate、crdate、locksuid、lockreason和lockdate列,用以支持上次登录和锁定不活动的帐户并使帐户所有者或管理员能够了解帐户是否已锁定、帐户的锁定时间、锁定者以及锁定原因.
创建登录时,crdate列设置为当前时间.
如果enablelastloginupdates口令策略选项设置为1,则lastlogindate列将设置为登录的datetime,并且该列以前的值存储在登录会话的进程状态结构中.
每次登录SAPASE时都会更新syslogins和进程状态结构.
对于新的master数据库或升级的数据库,enablelastloginupdates的缺省值为1.
要禁用此选项,请使用管理员特权执行以下过程:sp_passwordpolicy'set','enablelastloginupdates','0'@@lastlogindate特定于每次用户登录会话,该会话可以使用此变量来确定帐户上次登录的日期和时间.
如果以前未使用过该帐户,或enablelastloginupdates为0,则@@lastlogindate的值为NULL.
事务日志不会记录对syslogins.
.
lastlogindate的更新.
具有sso_role的管理员可以使用以下命令锁定在给定天数内处于不活动状态的登录帐户:sp_locklogin'all','lock',[@except],'numberofinactivedays'如果enablelastloginupdates设置为0,或lastlogindate列的值为NULL,则此命令无效.
numberofinactivedays的值范围为1–32767(天).
lockreason列指定登录锁定原因.
lockdate列的值设置为当前datetime.
如果帐户被解锁,列lockreason、lockdate和locksuid都会被重置为NULL.
lockdate、locksuid和lockreason列由SAPASE内部设置.
表4.
原因和locksuid的值lockreason的值locksuid的值lockreasonaccount的说明NULLNULL帐户未被锁定.
0sp_locklogin的调用者的suidlocksuid通过手动执行sp_locklogin而锁定的帐户.
1sp_locklogin的调用者的suid因帐户不活动而锁定的帐户,locksuid已手动执行sp_locklogin'all','lock','ndays'.
第3章:管理SAPASE登录名和数据库用户42AdaptiveServerEnterpriselockreason的值locksuid的值lockreasonaccount的说明2尝试登录的suid因登录尝试失败次数达到了最大登录失败次数而锁定的帐户.
3sp_passwordpolicyset,"allowpassworddown-grade",0的调用者的suid因口令降级阶段已结束、登录名或角色尚未过渡到SHA-256而由locksuid锁定的帐户.
4NULL帐户由于不活动而被锁定.
跟踪锁定的角色诸如角色锁定时间、锁定原因和锁定者等记帐信息存储在syssrvroles中,进行角色锁定记帐时可能会用到这些信息.
锁定角色的原因可以有多种:输入错误的角色口令达到指定的次数.
"maxfailed_logins"选项可以在创建或改变角色时与角色相关联.
它指定在角色激活尝试失败多少次之后锁定角色.
使用alterrole手动锁定角色:alterrolerolenamelocksyssrvroles中包括以下有关锁定信息的列:lockdate–指示角色锁定时间.
locksuid–指示角色锁定者.
lockreason–给出角色锁定原因.
它采用代码形式:lockreason的值locksuid的值角色的lockreason的说明NULLNULL角色未锁定1alterrole的调用者的suid角色已由suid通过手动执行alterrolerole-namelock而锁定2上次尝试角色激活导致角色被锁定的用户的suid角色已由于角色激活尝试的失败次数达到了maxfailedlogins而锁定.
锁定和解锁角色使用alterrole锁定和解锁角色.
系统安全员可使用alterrole手动锁定或解锁角色.
例如:alterrolephysician_rolelockalterrolephysician_roleunlock第3章:管理SAPASE登录名和数据库用户安全性管理43有关角色锁定状态的信息存储在syssrvroles的status列中.
请参见《参考手册:命令》中的"alterrole".
注意:在高可用性环境中,这些syssrvrole列在主服务器和辅助服务器上都将进行更新.
锁定拥有阈值的登录名阈值会受到锁定的用户登录名的影响.
作为一项安全性措施,可使用帐户名和创建此过程的登录角色来执行阈值存储过程.
不能删除拥有阈值的用户登录.
如果锁定拥有阈值的用户登录,则用户不能执行存储过程.
最后机会阈值和使用"sa"登录创建的阈值不受sp_locklogin的影响.
如果锁定"sa"登录,则由"sa"用户创建或修改的最后机会阈值仍会引发.
管理登录配置文件系统安全员可以定义、改变和删除登录配置文件.
下表总结了用于创建和管理登录配置文件的系统过程和命令.
任务要求的角色命令或过程数据库创建登录配置文件系统安全员createloginprofilemaster数据库改变配置文件系统安全员alterloginprofilemaster数据库删除登录配置文件系统安全员droploginprofilemaster数据库返回登录配置文件ID系统安全员lprofile_id任何数据库返回登录配置文件名系统安全员lprofile_name任何数据库显示登录配置文件名系统安全员sp_displaylogin任何数据库显示有关登录配置文件的信息系统安全员sp_securityprofile任何数据库登录配置文件属性登录配置文件属性存储在syslogins、sysloginroles和master.
dbo.
sysattributes中.
下表总结了登录配置文件的属性.
属性说明defaultdatabase缺省数据库.
第3章:管理SAPASE登录名和数据库用户44AdaptiveServerEnterprise属性说明defaultlanguage缺省语言.
loginscript有效的存储过程.
通过createlogin、alterlogin、createloginprofile和alterloginprofile用作登录脚本的存储过程仅限于120个字符.
autoactivatedroles必须在登录时自动激活的、非口令保护的已授予用户定义角色.
如果指定的角色未被授予登录名,则会生成错误.
缺省情况下,用户定义的角色不会在登录时自动激活.
authenticatewith指定用于验证登录帐户的机制.
如果未指定authenticatewith验证机制,则会对登录帐户应用值ANY.
tracklastlogin启用上次登录更新.
staleperiod指示允许登录帐户在因不活动而被锁定前保持不活动状态的持续时间.
profileid指定数据库.
登录配置文件属性优先级登录配置文件根据其优先级与登录帐户相关联并进行应用.
使用以下优先级将登录配置文件属性与登录帐户相关联:1.
与登录名绑定的登录配置文件的属性值2.
缺省登录配置文件的属性值3.
在以下情况下使用sp_passwordpolicy指定的值:缺省登录配置文件不存在还未定义登录配置文件并将其绑定到帐户登录配置文件被设置为忽略(为命令createlogin指定了参数withloginprofileignore)4.
属性的缺省值创建登录配置文件可以通过定义登录配置文件作为所有登录帐户、部分登录帐户或单个登录帐户的缺省设置,来管理大量登录帐户的属性.
1.
系统安全员为登录帐户创建登录配置文件.
2.
系统安全员为新用户创建登录帐户,并将登录配置文件与新登录帐户相关联.
3.
系统管理员或数据库所有者向数据库中添加用户或为组指派用户.
4.
系统安全员向用户或登录配置文件授予特定角色.
5.
系统管理员、数据库所有者或对象所有者授予用户或组对特定命令和数据库对象的特定权限.
以下示例创建登录配置文件mgr_lp:createloginprofilemgr_lp第3章:管理SAPASE登录名和数据库用户安全性管理45请参见《参考手册:命令》中的"createloginprofile".
创建缺省登录配置文件可以将某个登录配置文件定义为所有登录帐户的缺省配置文件.
下面的示例创建一个名为emp_lp的缺省登录配置文件.
如果已有另一个登录配置文件被配置为缺省登录配置文件,则该缺省属性会被删除并应用到emp_lp:createloginprofileemp_lpasdefault请参见《参考手册:命令》中的"createloginprofile".
将登录配置文件与登录帐户相关联如果在创建登录帐户时未指定登录配置文件,则缺省登录配置文件会与新帐户相关联.
如果不存在缺省登录配置文件,SAPASE会应用sp_passwordpolicy指定的口令策略属性或缺省属性.
下面的示例创建口令为rubaiyat的登录帐户omar_khayyam,并将该帐户与登录配置文件emp_lp相关联:createloginomar_khayyamwithpasswordrubaiyatloginprofileemp_lp下面的示例修改登录帐户omar_khayyam,并将该帐户与登录配置文件staff_lp相关联:alterloginomar_khayyammodifyloginprofilestaff_lp忽略登录配置文件ignoreloginprofile子句用于禁用直接关联或通过缺省登录配置文件进行关联的登录配置文件.
应用登录帐户的相应属性时应遵循优先规则.
下面的示例创建一个登录帐户,并指定忽略所有登录配置文件.
createloginmarybwithpassworditsAsecur8loginprofileignore将现有的登录帐户值转移到新的登录配置文件将现有的登录帐户值转移到新的登录配置文件.
下面的示例演示如何将现有的登录帐户值转移到新的登录配置文件.
在创建的登录配置文件sa_lp中,defaultdatabase、defaultlanguage和authenticatewith属性值被设置为与登录帐户ravi的值相同.
createloginprofilesa_lpwithattributesfromravi第3章:管理SAPASE登录名和数据库用户46AdaptiveServerEnterprise手动复制登录配置文件配置文件ID是一个可以为新登录配置文件指定ID的属性,用于在SAPASE中手动复制登录配置文件.
例如,如果要在复制master数据库中创建配置文件ID为25的配置文件emp_lp,请执行以下命令:createloginprofileemp_lpwithprofileid25向登录配置文件授予角色创建登录配置文件时,向登录配置文件授予角色.
下面的示例创建登录配置文件def_lp并向该登录配置文件授予角色access_role.
createloginprofiledef_lpgrantroleaccess_roletodef_lp任何绑定到def_lp的登录名都将被隐式授予access_role.
系统安全员可以指定授予登录配置文件的角色充当绑定登录名的缺省角色,也就是说,该角色会在用户登录时在其会话中自动激活.
如果已使用表达激活谓词的where子句向登录名授予缺省角色,则只在激活谓词评估结果为真时才激活缺省角色.
另请参见添加或删除自动激活的角色(第49页)调用登录脚本可以指定登录脚本以便在登录时通过登录配置文件调用.
语法为:createloginprofileravi_lpwithloginscript'empNew.
script'可以通过指定登录脚本所在的数据库以及所有者名称来限定登录脚本.
如果不用数据库名进行限定,则缺省数据库会优先于master数据库.
如果指定的登录脚本没有用所有者名称进行限定,则登录触发器的所有者,即当前登录,会优先于登录触发器所在数据库的所有者.
通过alterlogin、createloginprofile和alterloginprofile用作登录脚本的存储过程仅限于120个字符.
如果通过sp_logintrigger指定了全局登录触发器,则会在全局登录触发器之后调用登录脚本.
另请参见使用登录触发器(第174页)第3章:管理SAPASE登录名和数据库用户安全性管理47显示登录配置文件信息显示登录配置文件的相关信息,如名称、ID以及绑定信息等.
显示登录配置文件名若要显示具有指定登录配置文件ID或登录suid的登录配置文件名,请使用:lprofile_name([{loginprofileid|loginsuid}])必须具有系统安全员角色才能查看具有指定登录ID的配置文件名(如果它不是当前用户的登录ID).
下面的示例显示具有指定登录配置文件ID的登录配置文件名:selectlprofile_name(3)intern_lr如果不指定参数,则返回当前用户的登录配置文件名.
如果没有登录配置文件与指定的登录帐户相关联,则返回缺省登录配置文件的登录配置文件名.
不得设置登录配置文件忽略参数.
还可以使用sp_displaylogin显示登录配置文件名.
如果没有登录配置文件直接与登录帐户相关联,并且存在缺省登录配置文件,则会显示缺省登录配置文件的名称.
显示登录配置文件ID若要显示具有指定登录配置文件名或登录名的登录配置文件ID,请使用:lprofile_id([{loginprofilename|loginname}])必须具有系统安全员角色才能查看具有指定登录名的配置文件ID(如果它不是当前用户的登录名).
下面的示例显示具有指定登录配置文件ID的登录配置文件名:selectlprofile_id('intern_lr')3如果没有登录配置文件与指定的登录帐户相关联,则返回缺省登录配置文件的配置文件ID.
不得设置登录配置文件忽略参数.
显示登录配置文件绑定信息使用sp_securityprofile可显示与登录帐户相关联的登录配置文件属性.
注意:非特权登录帐户只能显示与其直接关联的登录配置文件的属性或缺省登录配置文件的属性.
必须具有系统安全员角色才能查看所有登录配置文件的属性和绑定.
有关语法的详细信息,请参见《参考手册:系统过程》中的"sp_securityprofile".
第3章:管理SAPASE登录名和数据库用户48AdaptiveServerEnterprise修改登录配置文件alterloginprofile命令可以用于添加、删除或更改登录配置文件的属性及其相应的值.
如果未指定这些属性,则它们将添加到登录配置文件中.
下面的示例从登录配置文件mgr_lp中删除登录脚本属性.
如果为缺省登录配置文件指定了登录脚本,则会在登录时调用它,否则将不调用任何登录脚本.
alterloginprofilemgr_lpdroploginscript有关完整语法,请参见《参考手册:命令》中的"alterloginprofile".
另请参见登录配置文件属性(第44页)添加或删除自动激活的角色非口令保护的已授予用户定义角色可以在登录时自动激活.
下面修改登录配置文件mgr_lp,并在与mgr_lp相关联的用户登录时自动激活角色mgr_role和eng_role.
alterloginprofilemgr_lpaddautoactivatedrolesmgr_role,eng_rolesysloginroles.
status列中指示了授予给登录配置文件的用户定义角色的自动激活角色状态.
值为"1"指示授予的角色必须在登录时自动激活.
撤消某个角色将会删除其在sysloginroles中的对应行,该角色将不会在登录时自动激活.
将按如下所示自动向用户的登录配置文件授予角色:1.
如果有缺省登录配置文件与帐户相关联,则会应用在缺省登录配置文件中指定的所有自动激活角色.
2.
如果既存在与帐户直接关联的登录配置文件,又存在缺省登录配置文件,则只会应用在与帐户直接关联的登录配置文件中指定的自动激活角色.
将登录配置文件更改为缺省登录配置文件as[not]缺省子句用于将登录配置文件指派为缺省登录配置文件或取消将其作为缺省登录配置文件.
下面的语句将名为emp_lp的登录配置文件更改为缺省登录配置文件.
alterloginprofileemp_lpasdefault下面的语句取消将名为emp_lp的登录配置文件作为缺省登录配置文件.
alterloginprofileuserGroup_lpasnotdefault第3章:管理SAPASE登录名和数据库用户安全性管理49删除登录配置文件命令droploginprofile可删除未绑定到登录帐户的登录配置文件.
使用droploginprofilewithoverride可强制删除绑定到登录帐户上的登录配置文件.
如果登录配置文件与登录帐户绑定,则登录帐户将绑定到缺省登录帐户(如果有的话).
如果指定了登录配置文件的ignore子句,则会删除该子句,并且缺省登录配置文件(如果存在)将与登录帐户相关联.
下面的示例强制删除登录配置文件eng_lp,即使它已绑定到一个或多个登录帐户.
droploginprofileeng_lpwithoverride向数据库添加用户数据库所有者或系统管理员可以使用sp_adduser向特定数据库中添加用户.
用户必须已经拥有SAPASE登录帐户.
语法为:sp_adduserloginame[,name_in_db[,grpname]]其中:loginame–是现有用户的登录名.
name_in_db–指定一个与登录名不同的名称,将采用该名称在数据库中标识用户.
使用name_in_db可以调整用户的优先选项.
例如,如果有五个名为Mary的用户,则每个用户都必须有一个不同的登录名.
MaryDoe可能以"maryd"登录,而MaryJones以"maryj"登录,依此类推.
但是,如果这些用户没有使用同一数据库,则每个人可能都希望在特定数据库中只以"mary"作为登录名.
如果不提供name_in_db参数,则数据库中的名称与loginame相同.
注意:此功能与"在数据库中使用别名"中描述的别名机制不同,后者将一个用户的标识和权限映射到另一个用户的标识和权限.
grpname–是数据库中现有组的名称.
如果不指定组名称,则用户将成为缺省组"public"的成员.
即使用户是其它组的成员,也仍属于"public"组.
sp_adduser命令将在当前数据库的sysusers系统表中添加一行.
如果某个用户在数据库的sysusers表中拥有一个条目,该用户:可以发出usedatabase_name命令来访问此数据库将缺省使用此数据库,条件是在createlogin中发出缺省数据库参数可以使用alterlogin命令使此数据库成为缺省数据库该示例显示数据库所有者如何授予已存在的工程组"eng"中的"maryh"访问权限:sp_addusermaryh,mary,eng第3章:管理SAPASE登录名和数据库用户50AdaptiveServerEnterprise下面的示例显示如何授予"maryd"访问数据库的权限,并保持其在数据库中的名称与登录名相同:sp_addusermaryd下面的示例显示如何将"maryj"添加到现有的"eng"组,并通过使用null而不是新的用户名来保留其登录名作为其在数据库中的名称:sp_addusermaryj,null,eng可以访问数据库的用户仍需要读取数据、修改数据和使用特定命令的权限.
这些权限可通过grant和revoke命令来授予.
另请参见更改组成员资格(第53页)将"guest"用户添加到数据库如果在数据库中创建一个名为"guest"的用户,就能够使任何拥有帐户的用户作为guest用户访问该数据库.
如果由尚未作为用户或别名用户被添加到数据库的用户发出usedatabase_name命令,SAPASE将查找guest用户.
如果存在,则允许用户以guest用户的权限访问数据库.
数据库所有者可以使用sp_adduser向数据库的sysusers表中添加guest条目:sp_adduserguest可以使用sp_dropuser命令删除guest用户.
如果从master数据库中删除guest用户,则尚未被添加到任何数据库的服务器用户将无法登录服务器.
注意:尽管可以有多个用户是数据库的guest用户,但SAPASE仍然可以使用用户在服务器内唯一的服务器用户ID来审计每个用户的活动.
"guest"用户权限安装SAPASE时,master.
.
sysusers中包含一个guest条目.
数据库所有者和数据库对象的所有者可以使用grant和revoke使"guest"的特权大于或小于"public"的特权.
"guest"继承"public"的特权.
用户数据库中的"guest"用户在用户数据库中,数据库所有者可添加一个允许所有AdaptiveServer用户使用该数据库的guest用户,这样所有者就不必使用sp_adduser将每个用户显式命名为数据库用户.
在允许访问数据库时,可以利用guest机制限制对数据库对象的访问.
例如,通过执行以下命令,titles表的所有者可以授予除"guest"外的所有数据库用户对titles的select权限:第3章:管理SAPASE登录名和数据库用户安全性管理51grantselectontitlestopublicsp_adduserguestrevokeallontitlesfromguest已安装系统数据库中的"guest"用户SAPASE使用guest用户创建系统tempdb数据库和用户创建的临时数据库.
"guest"用户自动拥有在tempdb中创建的临时对象和其它对象.
sybsystemprocs、sybsystemdb和sybsyntax数据库自动包括"guest"用户.
pubs2和pubs3中的"guest"用户利用样本数据库中的"guest"用户条目,新的用户可以按照《Transact-SQL用户指南》中的示例进行操作.
可授予guest用户许多特权,包括:对所有用户表的select权限与数据修改权限对所有过程的execute权限createtable、createview、createrule、createdefault和createprocedure权限将guest用户添加到服务器系统安全员可以使用createlogin输入登录名和口令,将指示访问用户使用该登录名和口令.
通常只授予这些用户有限的权限.
可以指定一个缺省数据库.
警告!
访问者用户帐户与"guest"用户帐户不是一回事.
所有具有访问者帐户的用户均使用相同的服务器用户ID;因此不能审计单个用户的活动.
每个"guest"用户都有一个唯一的服务器ID,因此可审记个人活动并分清个人责任.
SAP建议您不要创建一个访问者帐户供多个用户使用,因为这样会无法分清个人责任.
可以使用createlogin将名为"guest"的访问者用户帐户添加到master.
.
syslogins.
此"guest"用户帐户优先于系统的"guest"用户帐户.
如果用sp_adduser添加名为"guest"的访问者用户,则会影响诸如sybsystemprocs和sybsystemdb等系统数据库,在这些数据库中需与系统"guest"用户配合使用.
添加远程用户通过启用远程访问,可允许另一个SAPASE上的用户执行本地服务器上的存储过程.
使用远程服务器的系统管理员身份,您还可以允许本地服务器上的用户对远程服务器执行远程过程调用.
若要启用远程过程调用,您必须对本地服务器和远程服务器均进行重新配置.
请参见《系统管理指南,卷1》中的"管理远程服务器".
第3章:管理SAPASE登录名和数据库用户52AdaptiveServerEnterprise创建组利用组,您只需通过一个语句即可为多个用户授予或撤消权限,还可以为一组用户提供一个集合名称.
在管理拥有大量用户的SAPASE安装时,组非常有用.
请在向数据库中添加用户之前创建组,因为sp_adduser既可以将用户指派到组中,也可以将用户添加到数据库中.
您必须具有系统管理员或系统安全员角色或是数据库所有者,才能使用sp_addgroup创建组.
语法为:sp_addgroupgrpname组名(必需参数)必须遵循标识符规则.
系统管理员、系统安全员或数据库所有者可以使用sp_changegroup将用户指派或重新指派给组.
例如,若要创建SeniorEngineering组,请在使用要添加该组的数据库时使用此命令:sp_addgroupseniorengsp_addgroup命令将在当前数据库的sysusers中添加一行.
因此,数据库中的每个组以及每个用户在sysusers中都有一个条目.
更改组成员资格系统管理员、系统安全员或数据库所有者可以使用sp_changegroup更改用户的组从属关系.
每个用户只能从属于一个组,但"public"组除外,所有用户始终都是"public"组的成员.
在执行sp_changegroup之前:组必须存在.
用户必须具有对当前数据库的访问权限(必须在sysusers中列出).
sp_changegroup的语法为:sp_changegroupgrpname,username例如,若要将用户"jim"从当前组更改到"management"组,请使用:sp_changegroupmanagement,jim若要从组中删除一个用户而不将其指派到另一组,必须将其组的从属关系更改为"public":sp_changegroup"public",jim名称"public"必须用双引号引起,因为它是一个保留字.
此命令将Jim的组从属关系简化为只属于"public".
第3章:管理SAPASE登录名和数据库用户安全性管理53当某个用户从一个组更改到另一个组时,该用户将失去在旧组中拥有的所有权限,而获得向新组授予的权限.
在任何时间都可以更改用户的组指派.
创建组和添加用户系统安全员、系统管理员或数据库管理员使用sp_addgroupgroup_name来创建组.
可以在组级授予和撤消权限.
组权限将自动传递到组成员.
每个数据库在创建后都有一个名为"public"的组,所有用户均将自动从属于该组.
使用sp_adduser向组中添加用户,并使用sp_changegroup更改用户所在的组.
组由sysusers表中的条目表示.
您不能使用相同的名称在数据库中创建组和用户(例如,不能将某个组和用户同时命名为"shirley").
数据库中的别名利用别名机制,可在数据库中把两个或多个用户当作同一用户对待,因此这些用户均具有相同的权限.
此机制经常用于使多个用户充当数据库所有者的角色.
数据库所有者可以使用setuser命令模拟数据库中的另一个用户.
也可以使用别名机制设置一个集合用户标识.
例如,假设有几个副总裁要以相同的权限和所有权使用同一个数据库.
如果将登录名"vp"添加到服务器和数据库中,并且让每个副总裁都以"vp"登录,则无法区分开各个用户.
反之,若为每个副总裁指定一个数据库用户名"vp"的别名,每个人都可以有自己的帐户.
注意:尽管在一个数据库中可能有多人使用别名,但仍可通过审计每个用户所执行的数据库操作来分清个人责任.
使用别名过程中的集合用户标识意味着数据库对象的集合所有权.
例如,如果用户"loginA"在数据库db1中的别名为dboin,则"loginA"在db1中创建的所有对象都归dbo所有.
但是,将按照登录名和创建者的数据库用户ID具体地记录对象的所有权.
如果别名具体地拥有数据库中的任何对象,则不能将其从该数据库删除.
注意:如果某个登录在数据库中创建了对象,则不能删除该登录的别名.
在大多数情况下,只对不拥有表、过程、视图或触发器的用户使用别名.
另请参见第10章,「审计」(第271页)具体标识(第136页)第3章:管理SAPASE登录名和数据库用户54AdaptiveServerEnterprise添加别名若要为用户添加别名,请使用sp_addalias:语法为:sp_addaliasloginame,name_in_db其中:loginame–是当前数据库中需要别名的用户的名称.
此用户必须有一个帐户且不能是当前数据库的用户.
name_in_db–是数据库用户的名称,由loginame指定的用户将被链接到此数据库用户.
name_in_db必须存在于当前数据库的sysusers中.
执行sp_addalias可将由loginame指定的用户名映射到由name_in_db指定的用户名.
此功能是通过在系统表sysalternates中添加一行实现的.
用户试图使用数据库时,将在sysusers中对用户的服务器用户ID号执行检查.
如果未发现,随后将检查sysalternates.
如果在此发现用户的suid,并且它已被映射到数据库用户的suid,则第一个用户在其使用数据库时将被看作是第二个用户.
例如,假定Mary拥有一个数据库.
她希望允许Jane和Sarah都可以使用此数据库,就像他们是数据库所有者一样.
Jane和Sarah有相应的登录名,但未获授权使用Mary的数据库.
Mary执行以下命令:sp_addaliasjane,dboexecsp_addaliassarah,dbo警告!
就讨论中的数据库而言,具有数据库所有者别名的用户拥有所有权限,并可执行数据库所有者能够执行的所有操作.
数据库所有者应仔细考虑授予其他用户数据库全部访问权限可能带来的后果.
删除别名使用sp_dropalias可删除替代suid与用户ID的映射关系.
删除替代suid与用户ID的映射关系将从sysalternates中删除相应的行.
语法如下,其中loginame是指使用sp_addalias映射用户名时由loginame指定的用户名:sp_dropaliasloginame在删除用户别名之后,该用户不再具有访问数据库的权限.
如果别名登录创建了任何对象或阈值,则不能删除此别名.
在使用sp_dropalias删除已经执行这些操作的别名之前,请删除对象或过程.
如果在删除别名以后仍要使用这些对象或过程,请使用其他所有者重新创建它们.
第3章:管理SAPASE登录名和数据库用户安全性管理55别名相关信息若要显示别名的相关信息,请使用sp_helpuser.
例如,要找到"dbo"的别名,请执行:sp_helpuserdboUsers_nameID_in_dbGroup_nameLogin_namedbo1publicsa(1rowaffected)Usersaliasedtouser.
Login_nameandychristahowardlinda获取有关用户的信息使用以下过程可获取有关用户、组和当前使用状况的信息.
任务过程报告当前用户和进程sp_who显示有关登录帐户的信息sp_displaylogin报告数据库中的用户和别名sp_helpuser报告数据库中的组sp_helpgroup有关用户和进程的报告使用sp_who可报告有关当前用户和进程的信息.
语法为:sp_who[loginame|"spid"]其中:loginame–是用户的登录名.
如果您提供登录名,则sp_who将报告有关此用户正在运行的进程的信息.
spid–是特定进程的编号.
对于每个进程运行,sp_who会报告服务器进程ID的安全相关信息、其状态、进程用户的登录名、真实的登录名(如果login_name为别名)、主机计算机的名称、阻塞此进程的进程(如果存在)的服务器进程ID、数据库名和正在运行的命令.
第3章:管理SAPASE登录名和数据库用户56AdaptiveServerEnterprise如果不提供登录名或spid,sp_who将报告所有用户正在运行的进程.
下面的示例显示了执行不带参数的sp_who命令得到的安全相关结果:fidspidstatusloginameorignamehostnameblk_spiddbnametempdbnamecmdblock_xloidthreadpool01runningsasasunbird0pubs2tempdbSELECT0syb_default_pool02sleepingNULLNULL0mastertempdbNETWORKHANDLER0syb_default_pool03sleepingNULLNULL0mastertempdbMIRRORHANDLER0syb_default_pool04sleepingNULLNULL0mastertempdbAUDITPROCESS0syb_default_pool05sleepingNULLNULL0mastertempdbCHECKPOINTSLEEP0syb_default_poolsp_who将所有系统进程的loginame报告为NULL.
获取有关登录帐户的信息使用sp_displaylogin可显示有关指定登录帐户或与通配符模式匹配的登录名(包括授予此帐户的任何角色)的信息,其中loginame(或通配符匹配模式)是要获取其有关信息的用户登录名模式.
语法为:sp_displaylogin[loginame|wildcard]如果您不是系统安全员或系统管理员,则只能显示有关自己的帐户的信息.
如果是系统安全员或系统管理员,则可以使用loginame|wildcard参数访问有关任何帐户的信息.
sp_displaylogin显示您的服务器用户ID、登录名、全名、授予您的任何角色、上次更改口令的日期、缺省数据库、缺省语言、帐户是否被锁定、任何自动登录脚本、口令有效期、口令是否已经到期、使用的登录口令加密版本,以及为登录指定的验证机制.
sp_displaylogin显示授予用户的所有角色,因此,即使已经使用set命令使某个角色失效,也会显示该角色.
例如,下面的示例显示sa的角色:sp_displaylogin'mylogin'Suid:121Loginame:myloginFullname:DefaultDatabase:masterDefaultLanguage:AutoLoginScript:ConfiguredAuthorization:sa_role(defaultON)sso_role(defaultON)oper_role(defaultON)第3章:管理SAPASE登录名和数据库用户安全性管理57sybase_ts_role(defaultON)Locked:NODateofLastPasswordChange:Aug10200611:17AMPasswordexpirationinterval:0Passwordexpired:NOMinimumpasswordlength:6Maximumfailedlogins:0Currentfailedloginattempts:Authenticatewith:NONELoginpasswordencryption:SYB-PROP,SHA-256Lastlogindate:Aug1720065:55PM(returnstatus=0)获取有关数据库用户的信息使用sp_helpuser报告有关当前数据库中经过授权的用户的信息.
其中,name_in_db是当前数据库中的用户名:sp_helpuser[name_in_db]如果您提供用户名,则sp_helpuser将报告有关该用户的信息.
如果不提供名称,此命令报告所有用户的有关信息.
下面的示例显示在pubs2数据库中执行不带参数的sp_helpuser命令得到的结果:sp_helpuserUsers_nameID_in_dbGroup_nameLogin_namedbo1publicsamarcy4publicmarcysandy3publicsandyjudy5publicjudylinda6publiclindaanne2publicannejim7seniorengjim查找用户名和ID若要查找用户的服务器用户ID或登录名,请使用suser_id和suser_name.
查找使用参数服务器用户IDsuser_id(["server_user_name"])服务器用户名(登录名)suser_name([server_user_ID])这些系统函数的参数都是可选的.
如果不提供参数,将显示有关当前用户的信息.
下面的示例显示如何查找用户"sandy"的服务器用户ID:selectsuser_id("sandy")------3下面的示例显示登录名为"mary"的系统管理员如何发出不带参数的命令:第3章:管理SAPASE登录名和数据库用户58AdaptiveServerEnterpriseselectsuser_name(),suser_id()mary4若要在数据库内查找用户的ID号或名称,请使用user_id和user_name.
表5.
系统函数user_id和user_name查找使用参数用户IDuser_id(["db_user_name"])用户名user_name([db_user_ID])这些函数的参数都是可选的.
如果不提供参数,将显示有关当前用户的信息.
例如:selectuser_name(10)NULL(1rowaffected)selectuser_name()dbo(1rowaffected)selectuser_id("joe")NULL(1rowaffected)更改用户信息以下命令和系统过程可用于更改口令、缺省数据库、缺省语言、全名或组指派.
任务要求的角色系统过程Master数据库用于:alter/create/droplogin/loginprofile命令更改用户口令用户alterlogin任何数据库更改其他用户的口令系统安全员alterlogin任何数据库更改验证机制系统安全员alterloginalterloginprofile任何数据库更改全名系统安全员alterlogin任何数据库更改您自己的全名用户alterlogin任何数据库第3章:管理SAPASE登录名和数据库用户安全性管理59任务要求的角色系统过程Master数据库用于:alter/create/droplogin/loginprofile命令更改缺省语言或缺省数据库系统安全员alterloginprofilealterlogin任何数据库更改用户的组指派系统管理员、数据库所有者或系统安全员sp_changegroup用户数据库更改登录配置文件系统安全员alterloginprofile任何数据库配置登录触发器系统安全员alterloginprofile任何数据库更改口令所有用户可以随时使用alterlogin更改其口令.
系统安全员可以使用alterlogin更改任何用户的口令.
例如,若要更改名为ron的登录帐户的口令,请输入:alterloginronwithpasswordwatsMypaswdmodifypassword8itsAsecret请参见《参考手册:命令》中的"alterlogin".
要求新口令可以选择使用systemwidepasswordexpiration配置参数设定口令有效期,这将强制所有用户定期更改口令.
即使不使用systemwide口令到期,但出于安全原因,用户定期更改口令也是非常重要的.
请参见《系统管理指南,卷1》中的"设置配置参数".
该配置参数被口令策略设置所取代.
passwordexpirationinterval可指定口令的有效期(以天为单位).
此有效期可以是介于0和32767之间的任何值(包括0和32767).
例如,如果您在2012年8月1日上午10:30创建一个新登录名,其口令有效期为30天,那么该口令将在2012年8月31日上午10:30过期.
syslogins表中的pwdate列记录了上次更改口令的日期.
下面的查询选择自2012年9月15日以来口令未更改的所有登录名:selectname,pwdatefromsysloginswherepwdatesp_downgrade'downgrade','15.
5',12>goDowngradefrom15.
7.
0.
0to15.
5.
0.
0(command:'downgrade')Checkingdatabasesfordowngradereadiness.
Therearenoerrorswhichinvolveencryptedcolumns.
第4章:管理角色安全性管理85Executingdowngradestep2[dbccmarkprocs(@dbid)]for:-Database:master(dbid:1)sqlcommanis:dbccmarkprocs(@dbid).
.
.
Executingdowngradestep26[deletestatisticssyssrvroles(password)ifexists(select1fromsyssrvroleswherepasswordisnotnull)beginprint"Truncatingpasswordandlockingfollowingrole(s)"selectnamefromsyssrvroleswherepasswordisnotnullupdatesyssrvrolessetpassword=null,status=(status|@lockrole)wherepasswordisnotnullendupdatesyscolumnssetlength=30whereid=object_id('syssrvroles')andname='password'updatesyssrvrolessetlocksuid=null,lockreason=null,lockdate=nullwherelocksuidisnotnullorlockreasonisnotnullorlockdateisnotnulldeletesyscolumnswhereid=object_id('syssrvroles')andnamein('locksuid','lockreason','lockdate')]for:-Database:master(dbid:1)sqlcommanis:deletestatisticssyssrvroles(password)ifexists(select1fromsyssrvroleswherepasswordisnotnull)beginprint"Truncatingpasswordandlockingfollowingrole(s)"selectnamefromsyssrvroleswherepasswordisnotnullupdatesyssrvrolessetpassword=null,status=(status|@lockrole)wherepasswordisnotnullendupdatesyscolumnssetlength=30whereid=object_id('syssrvroles')andname='password'updatesyssrvrolessetlocksuid=null,lockreason=null,lockdate=nullwherelocksuidisnotnullorlockreasonisnotnullorlockdateisnotnulldeletesyscolumnswhereid=object_id('syssrvroles')andnamein('locksuid','lockreason','lockdate')Truncatingpasswordandlockingfollowingrole(s)namedoctor_roleExecutingdowngradestep27[deletesysattributeswhereclass=35deletesysattributeswhereclass=39updatesysloginssetlpid=null,crsuid=nullwherelpidisnotnullorcrsuidisnotnulldeletesyscolumnswhereid=object_id('syslogins')andnamein('lpid','crsuid')deletesysloginswhere(status&@lp_status)=@lp_statusupdatesysloginssetstatus=status&~(@exempt_lock)where(status&@exempt_lock)=@exempt_lock]for:-Database:master(dbid:1)sqlcommanis:deletesysattributeswhereclass=35delete第4章:管理角色86AdaptiveServerEnterprisesysattributeswhereclass=39updatesysloginssetlpid=null,crsuid=nullwherelpidisnotnullorcrsuidisnotnulldeletesyscolumnswhereid=object_id('syslogins')andnamein('lpid','crsuid')deletesysloginswhere(status&@lp_status)=@lp_statusupdatesysloginssetstatus=status&~(@exempt_lock)where(status&@exempt_lock)=@exempt_lock.
.
.
(returnstatus=0)错误日志中会显示额外的消息,以标识在sp_downgrade期间发生的步骤以及任何可能发生的系统错误,如示例降级过程的以下错误日志输出示例:00:0006:00000:00006:2011/06/2806:21:23.
95serverPreparingASEdowngradefrom15.
7.
0.
0to15.
5.
0.
0.
00:0006:00000:00006:2011/06/2806:21:24.
12serverStartingdowngradingASE.
00:0006:00000:00006:2011/06/2806:21:24.
12serverDowngrade:Markingstoredprocedurestoberecreatedfromtext.
00:0006:00000:00006:2011/06/2806:21:26.
13serverDowngrade:Removingfullloggingmodesfromsysattributes.
00:0006:00000:00006:2011/06/2806:21:26.
13serverDowngrade:Downgradingdata-onlylockedtablerows.
00:0006:00000:00006:2011/06/2806:21:26.
13serverDowngrade:Removingfullloggingmodesfromsysattributes.
00:0006:00000:00006:2011/06/2806:21:26.
13serverDowngrade:Removingcolumnsysoptions.
number.
00:0006:00000:00006:2011/06/2806:21:26.
13serverDowngrade:Removingsrvprincipalcolumnfromsysserverssystemtable00:0006:00000:00006:2011/06/2806:21:26.
14serverDowngrade:Removing'automaticmasterkeyaccess'configurationparameter.
00:0006:00000:00006:2011/06/2806:21:26.
14serverDowngrade:RemovingDualControlsysattributerows00:0006:00000:00006:2011/06/2806:21:26.
14serverDowngrade:Downgradingsysattributessystemtable.
00:0006:00000:00006:2011/06/2806:21:26.
16serverDowngrade:Downgradingsyscommentssystemtable.
00:0006:00000:00006:2011/06/2806:21:26.
19serverDowngrade:Truncatedrolepassword,lockedroleandremovedcolumnslocksuid,lockreason,lockdatefromsyssrvroles第4章:管理角色安全性管理8700:0006:00000:00006:2011/06/2806:21:26.
21serverDowngrade:RemovingcatalogchangesforRSAKeypairRegenerationPeriodandLoginProfile00:0006:00000:00006:2011/06/2806:21:26.
21serverDowngrade:Turningondatabasedowngradeindicator.
00:0006:00000:00006:2011/06/2806:21:26.
21serverDowngrade:Resettingdatabaseversionindicator.
00:0006:00000:00006:2011/06/2806:21:26.
21serverASEdowngradecompleted.
运行sp_downgrade之后,请关闭服务器,以避免新的登录或者其它可能修改数据或系统目录的操作.
如果重新启动SAPASE15.
7版:成功执行sp_downgrade并关闭服务器后,SAPASE会再次执行内部升级操作,对系统表的任何更改都会升级到15.
7版.
在启动要恢复到的早期SAPASE版本之前,必须再次执行sp_downgrade.
可以启用锁定的角色和截断的口令.
在下面的示例中,sp_displayroles的输出显示降级过程锁定了"doctor_role"并截断其口令:selectsrid,status,name,passwordfromsyssrvrolesgosuidstatusnamepassword332doctor_roleNULL以下命令可解锁角色:alterroledoctor_roleunlock以下命令可为角色设置新口令:alterroledoctor_roleaddpasswd"dProle1"现在,运行sp_displayroles会显示角色已被解锁并具有口令:selectsrid,status,name,"vers"=substring(password,2,1)fromsyssrvrolesgosuidstatusnamevers330doctor_role0x05第4章:管理角色88AdaptiveServerEnterprise第5章外部验证可使用存储在SAPASE外部存储库中的验证数据来验证用户.
通过使用中央存储库验证登录名,可以增强大型异构应用程序的安全性.
支持的外部验证方法如下:Kerberos–可在使用Kerberos基础结构的企业环境中,提供一种集中且安全的验证机制.
使用一台名为密钥分发中心(KDC)的第三方受托服务器进行验证,以同时检验客户端和服务器.
LDAP用户验证–轻量目录访问协议(LDAP)可根据用户的登录名和口令,提供一种集中式验证机制.
PAM用户验证–可插入验证模块(PAM)提供了一种集中式验证机制,将操作系统提供的界面用于管理和运行时应用程序界面.
针对基于网络的安全性配置SAPASE客户端和服务器之间的安全连接可用于登录验证和消息保护.
如果某个客户端请求验证服务:1.
该客户端使用安全性机制验证登录.
安全性机制返回一个包含安全性相关信息的证书.
2.
客户端将证书发送到SAPASE.
3.
SAPASE使用安全性机制验证客户端的证书.
如果证书有效,在客户端和SAPASE之间建立安全连接.
如果客户端请求消息保护服务:1.
客户端使用安全性机制来准备将发送到SAPASE的数据包.
根据所请求的安全服务,安全性机制可能会加密数据或创建一个与数据关联的密码签名.
2.
客户端将数据包发送到SAPASE.
安全性管理893.
当收到数据包时,SAPASE将使用安全性机制执行任何必需的解密和验证操作.
4.
SAPASE将结果返回给客户端,并使用安全性机制执行所请求的安全性功能.
例如,SAPASE可能以加密的形式返回结果.
SAPASE安全服务根据所选的安全性机制,SAPASE允许您使用一个或多个安全服务.
可以使用:统一登录–一次性验证用户,而不要求用户每次登录到SAPASE服务器时都提供用户名和口令.
消息保密性–通过网络加密数据.
相互验证–验证客户端和服务器的身份.
相互验证只能由客户端请求;而不能被要求.
消息完整性–验证并确保数据通信未被修改.
重放检测–验证并确保数据未被入侵者截取.
顺序混乱检查–验证数据通信的顺序.
消息源检查–验证消息源.
证书委托–允许客户端将证书委托给服务器,以便启用与远程服务器的安全连接.
该服务由Kerberos安全性机制支持.
当前,通过CIS与远程服务器建立的连接支持此服务.
远程过程安全性–为通过CIS实现Kerberos连接的远程过程通信建立相互验证、消息保密性和消息完整性.
注意:正在使用的安全性机制可能无法使用上述所有服务.
另请参见获取有关可用安全服务的信息(第101页)管理基于网络的安全性如何管理基于网络的安全性.
1.
编辑配置文件:libtcl.
cfg、objectid.
dat和interfaces(或目录服务).
请参见"安全性的配置文件"和所用平台的《OpenClient/Server配置指南》.
2.
确保安全性机制的安全管理员已为每个用户及SAPASE和BackupServer创建了登录.
请参见"向安全性机制标识用户和服务器"以及随安全性机制一起提供的文档.
3.
使用sp_configure配置所安装产品的安全性.
4.
重新启动服务器以激活usesecurityservices参数.
5.
使用createlogin添加登录帐户以支持企业范围的登录.
另外,还可以用sp_configure指定缺省安全登录.
第5章:外部验证90AdaptiveServerEnterprise请参见"添加登录以支持统一登录".
6.
使用sp_serveroption的securitymechanism选项为必需的远程服务器启用安全性机制.
请参见"为远程连接建立Kerberos安全性机制".
7.
使用isql_r或OpenClientClient-Library连接到SAPASE,并指定要使用的安全服务.
请参见"连接到服务器并使用安全服务".
另请参见《OpenClientClient-Library/C参考手册》中的"安全性功能"和所用平台的《OpenClient/Server配置指南》.
8.
使用函数show_sec_services和is_sec_services_on可检查哪些安全服务可用.
有关SAPASE所支持的一组安全性机制及其安全服务,可使用select来查询syssecmechs系统表.
安全性的配置文件在安装过程中,会在目录结构的缺省位置创建配置文件.
以下为配置文件的名称和位置:文件名说明位置libtcl.
cfg驱动程序配置文件包含有关目录、安全性和网络驱动程序的信息,还包含任何所需的初始化信息.
UNIX平台:$SYBASE/$SYBASE_OCS/configWindows平台:%SYBASE%\%SYBASE_OCS%\iniobjectid.
dat此对象标识符文件将全局对象标识符映射为字符集、归类序列和安全性机制的本地名.
UNIX平台:$SYBASE/configWindows平台:%SYBASE%\iniUNIX:interfaces桌面平台:sql.
iniinterfaces文件包含关于文件中所列出的每个服务器的连接和安全性信息.
UNIX平台:$SYBASE桌面平台:SYBASE_home\ini有关配置文件的详细说明,请参见所用平台的《OpenClient/Server配置指南》.
服务器的安全性信息使用interfaces文件或目录服务可提供有关安装中各个服务器的信息.
interfaces文件中包含服务器的网络和安全性信息.
要使用安全服务,interfaces文件必须包括"secmech"行,该行指定全局标识符或计划使用的安全服务的标识符.
SAPASE支持目录服务以跟踪有关服务器的信息.
目录服务管理网络服务器信息的创建、修改和检索.
使用目录服务的好处在于,当网络上新添加服务器或者服务器第5章:外部验证安全性管理91移动到新地址时,无需更新多个interfaces文件.
要将安全服务与目录服务一起使用,必须定义secmech安全属性,以指向您计划使用的安全服务的一个或多个全局标识符.
用于指定安全性机制的UNIX工具要指定安全性机制,请执行以下操作:如果使用的是interfaces文件,请使用dscp实用程序.
如果使用的是目录服务,则运行dscp_r实用程序.
注意:UNIX平台上提供的dsedit工具有助于创建interfaces文件或目录服务的条目.
但它并不为创建安全性机制的secmech条目提供支持.
有关dscp的详细信息,请参见《用于UNIX的OpenClient/Server配置指南》.
用于指定服务器属性的桌面工具要在sql.
ini文件或目录服务中提供安装的各个服务器的信息,请使用dsedit实用程序.
此实用程序提供一个图形用户界面,用来指定服务器属性(如服务器版本、名称和安全性机制).
对于安全性机制属性,可以为计划使用的安全性机制指定一个或多个对象标识符.
有关使用dsedit的信息,请参见《用于桌面平台的OpenClient/Server配置指南》.
准备libtcl.
cfg以使用基于网络的安全性编辑libtcl.
cfg或libtcl64.
cfg以使用基于网络的安全性.
libtcl.
cfg和libtcl64.
cfg(用于64位应用程序)包含有关三种类型驱动程序的信息:网络(Net-Library)目录服务安全性驱动程序是一个库,可提供到外部服务提供程序的接口.
驱动程序可动态装载,因而,在更改某个应用程序使用的驱动程序时无需重新链接到该应用程序.
网络驱动程序条目网络驱动程序条目的语法是:driver=protocoldescription其中:driver–是网络驱动程序的名称.
protocol–是网络协议的名称.
description–是条目说明.
此元素可选.
第5章:外部验证92AdaptiveServerEnterprise注意:如果不指定网络驱动程序,将自动使用适合当前应用程序和平台的驱动程序.
例如,对于UNIX平台,在使用安全服务时,会自动选用可以处理线程的驱动程序.
目录服务条目如果要使用目录服务而不是interfaces文件,则目录服务条目适用.
请参见所用平台的配置文档,以及所用平台的《OpenClient/Server配置指南》.
安全性驱动程序条目安全性驱动程序条目的语法为:provider=driverinit-string其中:provider–是安全性机制的本地名.
本地名称到全局对象标识符的映射是在objectid.
dat中定义的.
缺省的本地名是:"csfkrb5"–对于CyberSAFE或MITKerberos的安全性机制.
"LIBSMSSP"–对于WindowsNT或Windows95平台(仅适用于客户端)上的WindowsLANManager.
如果使用缺省值以外的本地机制名称,请更改objectid.
dat文件中的本地名称.
driver–是安全性驱动程序的名称.
用于UNIX平台的所有驱动程序的缺省位置为$SYBASE/$SYBASE_OCS/lib.
用于Windows平台的缺省位置为%SYBASE%\%SYBASE_OCS%\dll.
init-string–是驱动程序的初始化字符串.
此元素可选.
不同驱动程序的init-string值各不相同:Kerberos驱动程序–以下是init-string的语法,其中realm是缺省的Kerberos领域名:secbase=@realmWindowsNTLANManager–init-string不适用.
UNIX平台信息没有可用于编辑libtcl.
cfg文件的特殊工具.
使用您所喜欢的编辑器,为那些在安装SAPASE后已经存在的条目添加注释,或撤消对这些条目的注释.
在UNIX平台上安装SAPASE后,libtcl.
cfg文件已包含对应于文件以下三节的条目:[DRIVERS][DIRECTORY][SECURITY]各节无需依照特定顺序排列.
第5章:外部验证安全性管理93确保注释那些不想使用的条目(以";"开头),而取消对那些要使用的条目的注释(不以";"开头).
有关详细信息,请参见《用于UNIX的OpenClient/Server配置指南》用于SunSolaris的libtcl.
cfg样例[DRIVERS];libtli.
so=tcpunused;Thisisthenon-threadedtlidriver.
;libtli_r.
so=tcpunused;Thisisthethreadedtlidriver.
[SECURITY]csfkrb5=libsybskrb.
sosecbase=@MYREALMlibgss=/krb5/lib/libgss.
so此文件不使用目录服务,因为所有[DIRECTORY]节的条目均已被注释.
由于[DRIVERS]节中的所有网络驱动程序条目也已被注释,因此系统会自动选择合适的驱动程序.
当您使用安全服务时,SAPASE会自动选择线程驱动程序,而对于那些不能使用线程驱动程序的应用程序,则会自动选择非线程驱动程序.
例如,BackupServer不支持安全服务,不使用线程驱动程序.
桌面平台信息ocscfg实用程序自动为libtcl.
cfg文件创建节标题;您也可以使用osccfg来编辑libtcl.
cfg文件.
以下是用于桌面平台的libtcl.
cfg样例文件:[NT_DIRECTORY]ntreg_dsa=LIBDREGditbase=software\sybase\serverdsa[DRIVERS]NLWNSCK=TCPWinsockTCP/IPNet-LibdriverNLMSNMP=NAMEPIPENamedPipeNet-LibdriverNLNWLINK=SPXNTNWLINKSPX/IPXNet-LibdriverNLDECNET=DECNETDecNETNet-Libdriver[SECURITY]NTLM=LIBSMSSP请参见《用于桌面平台的OpenClient/Server配置指南》.
objectid.
dat文件objectid.
dat文件用于将全局对象标识符映射到本地名称,该文件包含用于字符集的[CHARSET]和用于安全服务的[SECURITY]等节.
下面是一个objectid.
dat样例文件:secmech]1.
3.
6.
1.
4.
1.
897.
4.
6.
3=NTLM1.
3.
6.
1.
4.
1.
897.
4.
6.
6=csfkrb5例如,全局对象标识符到本地名的映射为Kerberos服务(诸如标识符1.
3.
6.
1.
4.
1.
897.
4.
6.
6)映射到本地名(例如,"csfkrb5").
第5章:外部验证94AdaptiveServerEnterprise只有在更改了libtcl.
cfg文件中安全服务的本地名后,才可使用文本编辑器更改此文件.
例如,如果将[SECURITY]csfkrb5=libsybskrb.
sosecbase=@MYREALMlibgss=/krb5/lib/libgss.
so更改为:[SECURITY]csfkrb5_group=libsybskrb.
sosecbase=@MYREALMlibgss=/krb5/lib/libgss.
so请更改objectid.
dat以反映libtcl.
cfg中的更改.
只需在objectid.
dat中更改Kerberos行的本地名:1.
3.
6.
1.
4.
1.
897.
4.
6.
6=csfkrb5_group注意:只能为每个安全性机制指定一个本地名.
向安全性机制标识用户和服务器安全性机制的安全管理员必须为安全性机制定义主体(用户和服务器).
可用于添加用户和服务器的工具有:Kerberos–有关定义用户和服务器的信息,请参见Kerberos供应商特定的工具.
WindowsNTLANManager–运行"用户管理器"工具定义WindowsNTLANManager的用户.
将SAPASE服务器名称定义为WindowsNTLANManager的用户,并以该用户名显示SAPASE.
注意:在生产环境中,请控制对包含服务器和用户的键的文件的访问.
如果用户可以访问这些键,他们就能创建一个服务器来模拟您的服务器.
有关如何执行所需管理任务的详细信息,请参见第三方提供程序提供的安全性机制文档.
针对安全性配置SAPASEAdaptiveServer包括几个用于管理基于网络的安全性的配置参数.
必须是系统安全员才能设置这些参数.
用于基于网络的安全性的所有参数都是"安全性相关"配置参数组的一部分.
启用基于网络的安全性要启用或禁用基于网络的安全性,请使用sp_configure设置usesecurityservices配置参数.
如果usesecurityservices设置为1,则以下两个条件同时成立时,SAPASE支持安全性机制:interfaces文件或目录服务中列出了安全性机制的全局标识符.
第5章:外部验证安全性管理95objectid.
dat中的全局标识符映射到libtcl.
cfg中列出的本地名.
要求对用户进行验证如果想要要求用安全性机制对除系统安全员外的所有用户进行验证,请将unifiedloginrequired配置参数设置为1.
设置了此配置参数后,只有具有sso_role的用户才能使用用户名和口令登录到服务器:sp_configure"unifiedloginrequired",[0|1]例如,要求一个安全性机制验证所有登录,需执行:sp_configure"unifiedloginrequired",1建立安全缺省登录SAPASE对未在master.
.
syslogins中定义但已预先通过安全性机制验证的所有用户使用缺省登录名.
当一个具有有效的安全性机制证书的用户登录到SAPASE时,服务器将检查在master.
.
syslogins中是否存在该用户名.
如果存在,则SAPASE使用该用户名.
例如,如果用户以"ralph"身份登录到Kerberos安全性机制,且"ralph"存在于master.
.
syslogins中,则SAPASE将使用在服务器中为"ralph"定义的所有角色和授权.
但是,如果具有有效证书的用户登录到SAPASE,但该服务器却不知道该用户,则仅当使用sp_configure定义了安全缺省登录的情况下,才接受此登录名.
SAPASE对未在master.
.
syslogins中定义但已预先通过安全性机制验证的所有用户使用缺省登录名.
语法为:sp_configure"securedefaultlogin",0,login_namesecuredefaultlogin的缺省值为"guest".
安全缺省登录名必须也是master.
.
syslogins中的有效登录名.
例如,若要将"gen_auth"设置为缺省登录名:1.
使用createlogin将此登录名添加为有效用户:createlogingen_authwithpasswordpwgenau此过程将初始口令设置为"pwgenau".
2.
指定该登录作为安全缺省值:sp_configure"securedefaultlogin",0,gen_authSAPASE对预先通过安全性机制验证但SAPASE不知道的用户使用此登录名.
注意:多个用户可以使用与安全缺省登录名关联的suid.
因此,可能需要为缺省登录的全部活动激活审计.
可能还要考虑使用createloign来向服务器添加所有用户.
第5章:外部验证96AdaptiveServerEnterprise将安全性机制登录名映射到服务器名所有登录名都必须是有效标识符.
某些安全性机制可能允许在AdaptiveServer中无效的登录名.
例如,长度超过30个字符的登录名或包含特殊字符(例如!
、%、*和&)的登录名在AdaptiveServer中无效.
下表显示了如何转换登录名中的无效字符:无效字符转换为和符号&撇号'反斜杠\冒号:逗号,等号=左引号'百分号%右尖括号>右引号'变音符号~下划线_星号*减号-竖线|加号+引号"分号;斜杠/方括号[]#符号请参见《参考手册》中的"表达式、标识符和通配符".
要求使用加密实现消息保密性要想对进出SAPASE的所有消息加密,请将msgconfidentialityreqd配置参数设置为1.
如果此参数为0(缺省值),则不要求消息的保密性,但客户端仍可以建立消息保密性.
语法为:sp_configureconfiguration_parameter,[0|1]例如,若要求所有消息被加密,需执行:sp_configure"msgconfidentialityreqd",1第5章:外部验证安全性管理97要求数据完整性在SAPASE中,您可以使用msgintegrityreqd配置参数来要求检查所有消息中的一种或多种类型数据的完整性.
将msgintegrityreqd设置为1,以要求检查是否对所有消息进行了一般篡改.
如果msgintegrityreqd为0(缺省值),则不要求消息完整性,但客户端可以建立消息完整性(如果安全性机制支持).
基于网络的安全性的内存要求为每个安全连接分配大约2K的附加内存.
maxtotal_memory配置参数的值指定服务器启动时需要的内存量.
例如,如果服务器使用2K逻辑页,且如果预计同时发生的安全连接最大数目是150,请将maxtotal_memory参数增加150,这使得内存分配增加了150个2K块.
语法为:sp_configure"maxtotal_memory",value例如,如果服务器要求75,000个2K的内存块(包括增加的用于基于网络安全性的内存),需执行:sp_configure"maxtotal_memory",75000请参见《系统管理指南,卷2》中的"配置内存".
添加登录以支持统一登录请考虑是只允许被定义为有效登录的用户使用SAPASE,还是希望用户能够使用缺省登录进行登录.
当用户使用预验证证书登录时,SAPASE将执行以下操作:1.
检查该用户是否为master.
.
syslogins中的有效用户.
如果用户被列在master.
.
syslogins中,则无需口令便可接受此登录.
2.
如果用户名不在master.
.
syslogins中,则检查是否定义了缺省安全登录.
如果定义了缺省登录,则该用户将使用缺省值成功登录.
如果未定义缺省登录,则用户无法登录.
若要定义缺省登录,请在master.
.
syslogins中添加缺省登录,并使用sp_configure.
添加登录的常规步骤将登录添加到服务器,并且(可选)将具有相应角色和授权的用户添加到一个或多个数据库.
按照以下常规步骤将登录添加到服务器,并且(可选)将具有相应角色和授权的用户添加到一个或多个数据库.
第5章:外部验证98AdaptiveServerEnterprise1.
系统安全员使用createlogin为用户添加登录.
请参见"创建登录帐户".
2.
系统管理员或数据库所有者使用sp_adduser向一个或多个数据库添加此用户.
请参见"向数据库添加用户".
3.
系统管理员或数据库所有者使用sp_changegroup向数据库的组中添加此用户.
请参见"更改组成员资格".
4.
系统管理员或系统安全员使用grantrole向用户授予系统角色.
请参见"授予或撤消角色".
5.
系统安全员使用createrole和grantrole创建用户定义角色并向用户授予这些角色.
请参见"授予角色".
6.
数据库对象所有者授予对数据库对象的访问权限.
请参见"管理用户权限".
另请参见创建登录帐户(第10页)向数据库添加用户(第50页)更改组成员资格(第53页)授予或撤消角色(第81页)授予角色(第81页)第6章,「管理用户权限」(第131页)为远程连接建立Kerberos安全性机制SAPASE将在连接到另一台服务器以执行远程过程调用(RPC)时以及通过组件集成服务(CIS)建立远程连接时充当客户端.
对于通过SAPASE执行RPC的远程服务器登录,会在两个服务器之间建立一个物理连接.
服务器使用该物理连接建立一个或多个逻辑连接,每个RPC对应一个逻辑连接.
SAPASE使用Kerberos第5版提供的证书委托功能,为尝试通过CIS建立远程服务器连接的Kerberos登录提供端到端Kerberos验证支持.
通过证书委托或票据转发,Kerberos客户端能够在连接到服务器时委托证书,从而允许服务器发起Kerberos验证以便代表Kerberos客户端进一步连接到其它服务器.
连接到SAPASE的Kerberos客户端能够向SAPASE发出远程过程调用(RPC)请求,还能通过使用Kerberos证书委托功能经由CIS向远程服务器发出常规分布式查询处理请求.
远程服务器登录不支持用于远程服务器连接的Kerberos验证功能.
有关配置CISKerberos验证的信息,请参见《组件集成服务用户指南》中的"组件集成服务远程过程调用的配置".
第5章:外部验证安全性管理99统一登录和远程服务器登录如果本地服务器和远程服务器均设置为使用安全服务,则可以在这两台服务器上使用统一登录.
使用以下两种方法之一:系统安全员在远程服务器上使用sp_remoteoption将某位用户定义为"trusted".
用户使用"统一登录"获得对本地服务器的访问权,并执行远程服务器上的RPC.
此用户成为远程服务器的受托用户,不需提供口令.
当用户连接到本地服务器时,指定一个远程服务器口令.
OpenClientClient-Library/C所附带的ct_remote_pwd例程提供了用于指定远程服务器口令的功能.
请参见《OpenClientClient-Library/C参考手册》.
获取关于远程服务器的信息sp_helpserver用于显示服务器的相关信息.
如果不带参数运行sp_helpserver,它将提供sysservers中列出的所有服务器的相关信息.
可以指定某一特定服务器来接收有关该服务器的信息.
语法为:sp_helpserver[server]例如,要显示有关GATEWAY服务器的信息,需执行:sp_helpserverGATEWAY使用安全服务连接到服务器isql和bcp实用程序用于对连接启用基于网络的安全服务.
isql和bcp实用程序包括以下命令行选项:-Rremote_server_principal-Vsecurity_options-Zsecurity_mechanism这些选项在以下段落中说明.
-Rremote_server_principal–按照安全性机制的定义为服务器指定主体名.
缺省情况下,服务器的主体名称与服务器的网络名称(由-S选项或DSQUERY环境变量指定)一致.
当服务器的主体名称和网络名称不同时,必须使用-R选项.
-Vsecurity_options–指定基于网络的用户验证.
使用此选项时,用户必须在运行实用程序之前登录到网络的安全系统.
在这种情况下,如果用户指定-U选项,则必须提供安全性机制已知的网络用户名,而通过-P选项提供的任何口令均被忽略.
-V后面可接security_options关键字母字符串选项,以启用其它安全服务.
这些关键字母包括:c–启用数据保密性服务.
第5章:外部验证100AdaptiveServerEnterprised–请求证书委托并转发客户端证书.
i–启用数据完整性服务.
m–启用用于建立连接的相互验证.
o–启用数据源加戳服务.
r–启用数据重放检测.
q–启用顺序混乱检测.
-Zsecurity_mechanism–指定用于连接的安全性机制的名称.
在libtcl.
cfg配置文件中定义安全性机制名称.
如果不提供security_mechanism名称,则使用缺省机制.
请参见所用平台的《OpenClient/Server配置指南》.
如果使用Client-Library连接到SAPASE,可以在连接到服务器之前定义安全性属性.
例如,要检查消息序列,可设置CS_SEC_DETECTSEQ属性.
有关通过Client-Library使用安全服务的信息,请参见《OpenClientClient-Library/C参考手册》.
客户端的安全性机制SAPASE在启动时,确定它支持的一套安全性机制.
SAPASE必须从支持的安全性机制列表中选择要用于特定客户端的一种机制.
如果客户端指定一种安全性机制(例如,使用isql的-Z选项),则SAPASE会使用该安全性机制.
否则,它使用libtcl.
cfg文件中列出的第一个安全性机制.
获取有关可用安全服务的信息可以确定支持哪些安全性机制和服务、当前会话的哪些安全服务处于活动状态以及是否为会话启用了特定安全服务确定所支持的安全服务和机制系统表syssecmechs提供支持的安全性机制和安全服务的信息.
在您执行查询时动态建立的表包含以下这列:sec_mech_name–是安全性机制名称;例如,安全性机制可能是"NTLANMANAGER".
available_service–是安全性机制所支持的安全服务名称;例如,安全服务可能是"统一登录".
针对单个安全性机制,该表可具有若干行:每一行列出该机制所支持的一种安全服务.
要列出支持的所有安全性机制和服务,请运行:select*fromsyssecmechs确定活动的安全服务要确定当前会话的哪些安全服务处于活动状态,请使用函数show_sec_services:selectshow_sec_services()第5章:外部验证安全性管理101unifiedloginmutualauthconfidentiality(1rowaffected)确定是否启用了安全服务要确定是否启用了某一特定的安全服务(例如"mutualauth"),请使用函数is_sec_service_on,其中security_service_nm是可用的安全服务:is_sec_service_on(security_service_nm)使用在查询syssecmechs时返回的安全服务器.
例如,若要确定是否启用了"mutualauth",请执行:selectis_sec_service_on("mutualauth")1(1rowaffected)结果为1表明已为会话启用了此安全服务.
结果为0表明未使用此服务.
KerberosKerberos是一种网络验证协议,它使用密钥密码技术,以便客户端可以通过网络连接向服务器证明其身份.
当用户登录到操作系统或执行验证程序时,将获得用户证书.
各个应用程序将使用这些证书执行验证.
用户只需登录一次,而不必登录到每个应用程序.
Kerberos假设密钥分发中心(KDC)正在运行并针对您的领域进行了适当的配置,而且客户端库安装在领域中的每个客户端主机下或主机上.
有关配置信息,请参见文档和Kerberos软件附带的参考页.
SAPASE通过以下库支持Kerberos:CyberSafeKerberos库2.
1版MITKerberos库1.
4.
3版(适用于Windows64位的4.
0.
1版)本机库注意:要启用Kerberos的安全性选项,必须拥有ASE_SECDIR,即"安全和目录服务"软件包.
Kerberos兼容性SAPASEKerberos互操作性.
此表显示哪个平台支持哪一种Kerberos.
硬件平台KDC服务器通用安全标准(GSS)客户端HP-UXItanium64位MITMITKerberos1.
4.
1第5章:外部验证102AdaptiveServerEnterprise硬件平台KDC服务器通用安全标准(GSS)客户端HP-UXPARisc64位MITMITKerberos1.
4.
3IBMAIX64位MITCyberSafeTrustBroker2.
1、MITKerberos1.
4.
3LinuxonPower64位MITMITKerberos1.
4.
1LinuxOpteron64位MITMITKerberos1.
4.
3、本机Solaris64位MITCyberSafeTrustBroker2.
1、MITKerberos1.
4.
1、本机SolarisOpteron64位MIT、CSFMITKerberos1.
4.
2WindowsOpteronX64ADCyberSafeTrustBroker2.
1、MITKerberos4.
0.
1使用以下密钥读取互操作性矩阵:CSF–CyberSafeLtd.
AD–MicrosoftActiveDirectoryMIT–MIT1.
4.
3版(适用于Windows64位的4.
0.
1版)有关CyberSafe版本与SAPASE兼容性的详细信息,请参见CyberSafe网站:https://cybersafe.
com/content/sybase-product-compatability.
在Kerberos下启动SAPASE服务器要在Kerberos下启动SAPASE服务器,应将服务器名称添加到KDC中,并将服务键提取到键表文件.
例如:/krb5/bin/adminadmin/ASE-k-t/krb5/v5srvtab-R"addrnmy_ase;modmy_aseattrnopwchg;ext-nmy_aseeytabfile.
krb5"Connectingas:admin/ASEConnectedtocsfA5v01inrealmASE.
Principaladded.
Principalmodified.
Keyextracted.
Disconnected.
注意:也可以使用命令行上的口令验证管理员.
在本例中,使用了-k选项,该选项指示管理员搜索/krb5/v5srvtab文件(使用-t选项指定)查找管理员和SAPASE服务器键,而不是提示输入用于编写shell脚本的口令.
配置Kerberos不管使用哪一种Kerberos,其配置过程都是相似的.
1.
设置Kerberos第三方软件,并创建一个Kerberos管理员.
为此,必须执行以下操作:a)在将要运行OpenClientServer客户端或SAPASE的计算机上安装Kerberos客户端软件.
以下客户端软件包已经过验证,可以运行:第5章:外部验证安全性管理103CyberSafeTrustBroker2.
1MITKerberos1.
4.
3版(适用于Windows64位的4.
0.
1版)b)在一台单独的专用计算机上安装KerberosKDC服务器.
CyberSafeTrustBroker2.
1版、MITKerberos1.
8.
2版和MicrosoftWindowsActiveDirectory中的KDC已经通过验证,可与SAPASE一起使用.
c)在Kerberos服务器上创建具有管理特权的管理员帐户.
此帐户用于后续的客户端操作(如从客户端计算机创建主体).
在Kerberos客户端计算机上执行其余步骤.
2.
为SAPASEase120srv或ase120srv@MYREALM添加Kerberos主体.
3.
为主体ase120srv@MYREALM提取keytab文件,并将其作为以下文件存储:/krb5/v5srvtab以下UNIX示例使用了可用于CyberSafe或MITKerberos的命令行工具kadmin(还存在可用于管理Kerberos和用户的GUI工具):CyberSafeKadmin:%kadminaseadminPrincipal-aseadmin@MYREALMEnterpassword:ConnectedtocsfA5v01inrealmASE.
Command:addase120srvEnterpassword:Re-enterpasswordforverification:Principaladded.
Command:ext-nase120srvServiceKeyTableFileName(/krb5/v5srvtab):Keyextracted.
Command:quitDisconnected.
在生产环境中,请控制对keytab文件的访问.
如果用户可以读取keytab文件,则该用户就能创建一个服务器来模拟您的服务器.
使用chmod和chgrp命令后,/krb5/v5srvtab将变为以下形式:-rw-r-----1rootsybase45Feb2715:42/krb5/v5srvtab在将ActiveDirectory用作KDC时,请登录到域控制器以添加用户和SAPASE主体.
可使用"ActiveDirectory用户和计算机"(ActiveDirectoryUsersandComputers)向导来引导您完成创建用户及主体的过程.
提取用于SAPASE的keytab文件需要一个名为ktpass的可选工具,该工具包含在Microsoft支持工具软件包中.
对于ActiveDirectory,使用ktpass提取keytab是一个独立于创建主体的步骤.
在Windows上,用于SAPASE的keytab文件与CyberSafe程序文件放在一起.
例如,如果CyberSafe软件安装在C盘驱动器上,则c:\ProgramFiles\CyberSafe\v5srvtab便是SAPASEkeytab文件的预期位置.
第5章:外部验证104AdaptiveServerEnterprise4.
为用户"sybuser1"添加名为"sybuser1@MYREALM"的Kerberos主体.
5.
启动SAPASE服务器,并使用isql命令以"sa"身份登录.
以下步骤用于配置SAPASE参数,以便使用Kerberos安全服务,并创建用户登录帐户.
以下步骤在Windows或UNIX计算机上都是相同的:a)将配置参数usesecurityservices更改为1:sp_configure'usesecurityservices',1b)为用户"sybuser1"添加新登录名,然后添加用户:createloginsybuser1withpasswordpassword6.
关闭SAPASE服务器,并修改管理文件和连接配置文件.
在UNIX平台上–interfaces文件位于$SYBASE/下,并包含一个类似于以下内容的条目:ase120srvmastertlitcpmyhost2524querytlitcpmyhost2524secmech1.
3.
6.
1.
4.
1.
897.
4.
6.
6在Windows平台上–sql.
ini文件位于%SYBASE%\ini中,并具有一个类似于以下内容的等效服务器条目:[ase120srv]master=TCP,myhost,2524query=TCP,myhost,2524secmech=1.
3.
6.
1.
4.
1.
897.
4.
6.
6libtcl.
cfg或libtcl64.
cfg文件位于UNIX平台上的$SYBASE/$SYBASE_OCS/config/中.
SECURITY部分应该具有一个用于CyberSafeKerberos客户端库的条目,该条目与以下内容相似:(这些示例中以"csfkrb5"开头的行都是单行,但由于空间原因而被拆分)[SECURITY]csfkrb5=libsybskrb.
sosecbase=@MYREALMlibgss=/krb5/lib/libgss.
so以下是64位CyberSafeKerberos客户端库条目:[SECURITY]csfkrb5=libsybskrb64.
sosecbase=@MYREALMlibgss=/krb5/appsec-rt\/lib/64/libgss.
so对于使用MITKerberos客户端库的计算机,相应的条目与以下内容相似:[SECURITY]csfkrb5=libsybskrb.
sosecbase=@MYREALMlibgss=/opt/mitkrb5/lib/\libgssapi_krb5.
so对于使用本机操作系统(例如Linux)提供的库的计算机,相应的条目与以下内容相似:[SECURITY]csfkrb5=libsybskrb.
sosecbase=@MYREALMlibgss=/usr/kerberos/lib/\libgssapi_krb5.
so第5章:外部验证安全性管理105在Windows上–%SYBASE%\%SYBASE_OCS%\ini\libtcl.
cfg文件包含如下条目:[SECURITY]csfkrb5=libskrbsecbase=@MYREALMlibgss=C:\WinNT\System32\^gssapi32.
dll注意:libgss=指定要使用的GSSAPI库.
您必须直接定位到正在使用的KerberosClient库,特别是当一台计算机上安装了多个版本时更是如此.
还要检查$SYBASE/$SYBASE_OCS/config/下的objectid.
dat文件,并确保[secmech]部分具有用于csfkrb5文件的条目:[secmech]1.
3.
6.
1.
4.
1.
897.
4.
6.
6=csfkrb57.
可以使用环境变量来替换keytab文件、Kerberos配置以及领域配置文件的缺省位置.
这是Kerberos特有的行为,可能不会在所有平台上都能工作.
例如,在CyberSafeUNIX平台上使用CSFC5KTNAME环境变量来指定keytab文件:%setenvCSFC5KTNAME/krb5/v5srvtab对于MITKerberos,等同的环境变量是KRB5_KTNAME.
有关这些环境变量的信息,请参见供应商文档.
可能需要为动态库搜索路径修改环境变量.
在UNIX上,最常用的环境变量是LD_LIBRARY_PATH;在Windows上,PATH通常设置为包括DLL位置.
可能需要修改这些环境变量,以使应用程序能够正确装载第三方对象.
例如,在C-shell环境下,以下命令会将CyberSafe32位libgss.
so共享对象的位置添加到搜索路径中:%setpath=(/krb5/lib$path)8.
重新启动服务器.
您应会看到:00:00000:00000:2001/07/2511:43:09.
91serverSuccessfullyinitializedthesecuritymechanism'csfkrb5'.
TheSQLServerwillsupportuseofthissecuritymechanism.
9.
以UNIX用户"sybuser1"的身份使用isql(不带-U和-P参数)进行连接:%$SYBASE/$SYBASE_OCS/bin/isql-Sase120srv-V1>.
.
.
也可以使用加密选项:$SYBASE/$SYBASE_OCS/bin/isql-Sase120srv–Vc第5章:外部验证106AdaptiveServerEnterprise主体名称主体名称是服务器向Kerberos密钥分发中心(KDC)进行验证时使用的名称.
如果存在多个正在运行的实例,则必须为每个服务器使用不同的主体名称.
服务器主体名称使用DSLISTEN和DSQUERY环境变量或dataserver-sserver_name命令行选项来指定服务器名称.
使用setenv命令或-kdataserver选项来设置主体名称.
缺省情况下,主体名称为SAPASE服务器的名称.
要指定不同的名称,请在启动SAPASE以使用Kerberos之前设置SYBASE_PRINCIPAL:setenvSYBASE_PRINCIPAL一旦设置了主体名称,此变量的值将用于向Kerberos验证自身.
要在启动服务器时指定主体名称,请使用:-k在启用了Kerberos安全性机制的情况下启动服务器时,以-k选项指定的主体名称将用于Kerberos验证.
如果未指定-k选项,将使用SYBASE_PRINCIPAL环境变量中的主体名称.
如果两者均未指定,则使用服务器名称进行验证.
如果keytab文件中存在主体名称条目,则将接受使用不同服务器主体名称的KerberosOpenClient连接.
允许使用不同主题名称的连接:传递一个空字符串作为-k选项的参数,或者将SYBASE_PRINCIPAL环境变量设置为"".
例如:exportSYBASE_PRINCIPAL=""示例在本示例中,服务器名为"secure_ase",领域名为"MYREALM.
COM".
服务器的名称是使用dataserver的-s参数在命令行上指定的.
当前领域是在libtcl.
cfg中由secbase属性值指定的:[SECURITY]csfkrb5=libskrb.
solibgss=/krb5/lib/libgss.
sosecbase=@MYREALM.
COM缺省的主体名称为"secure_ase@MYREALM.
COM".
如果keytab文件中定义的主体名称为"aseprincipal@MYREALM.
COM",则可通过使用下面的选项1或选项2设置服务器主体名称来覆盖缺省主体名称:选项1,指定-k'':%$SYBASE/$SYBASE_ASE/bin/dataserver-dmaster.
dat-ssecure_ase-kaseprincipal@MYREALM.
COM第5章:外部验证安全性管理107通过Kerberos进行验证时使用的主体名称为"aseprincipal@MYREALM.
COM".
选项2,设置SYBASE_PRINCIPAL:setenvSYBASE_PRINCIPALaseprincipal@MYREALM.
COM$SYBASE/$SYBASE_ASE/bin/dataserver–dmaster.
dat-ssecure_ase通过Kerberos进行验证时使用的主体名称为"aseprincipal@MYREALM.
COM",即$SYBASE_PRINCIPAL的值.
选项3,既不设置-k也不设置SYBASE_PRINCIPAL:%$SYBASE/$SYBASE_ASE/bin/dataserver–dmaster.
dat-ssecure_ase通过Kerberos进行验证时使用的主体名称为"secure_ase@MYREALM.
COM".
使用sybmapname处理用户主体名称sybmapname将Kerberos环境中使用的外部用户主体名称转换为用户登录名的命名空间.
可以自定义sybmapname共享对象,并将Kerberos输入缓冲区中指定的名称映射为适合于登录到服务器输出缓冲区的名称.
使用sybmapname共享对象来执行用户主体名称和登录名之间的自定义映射.
可以选择在服务器启动时装载此共享对象,在成功完成Kerberos验证之后、用户主体映射到syslogins表中的登录名之前,将调用此共享对象中包含的函数syb__map_name.
当要映射的用户主管名和登录名不同时,此函数很有用.
syb__map_name(NAMEMAPTYPE*protocol,char*orig,intoriglen,char*mapped,int*mappedlen)其中:NAMEMAPTYPE*protocol–是为使用此函数而保留的结构.
char*orig–是不以空值终止的输入缓冲区.
intoriglen–是输入缓冲区长度,其长度应小于或等于255个字符.
char*mapped–是不应以空值终止的输出缓冲区.
int*mappedlen–是输出缓冲区长度,其长度应小于或等于30.
如果映射成功,syb__map_name将返回大于0的值,或者,如果未发生映射,则返回值0,而当syb__map_name中发生错误时则返回小于0的值.
发生错误时,将向错误日志中写入报告映射失败的内容.
例如,要验证SAPASE上的Kerberos用户,请执行下列操作:1.
配置SAPASE以使用Kerberos安全性机制.
请参见使用Kerberos和OpenClient/Server文档.
另请参见Sybase网站上标题为"为Sybase配置Kerberos"(ConfiguringKerberosforSybase)的白皮书.
示例文件sybmapname.
c位于$SYBASE/$SYBASE_ASE/sample/server/sybmapname.
c中.
第5章:外部验证108AdaptiveServerEnterprise2.
修改sybmapname.
c以执行您的逻辑.
请参见"使用sybmapname时的注意事项".
3.
使用提供的通用平台专用的makefile构建共享对象或DLL.
可能需要修改makefile以适合平台特定设置.
4.
请将生成的共享对象放在$LD_LIBRARY_PATH(UNIX计算机)和PATH变量(Windows计算机)中指定的位置.
"sybase"用户应该具有该文件的read和execute权限.
注意:SAP建议只允许"sybase"用户具有read和execute权限,并拒绝所有其它用户的访问.
使用sybmapname时的注意事项对sybmapname进行编码时:修改sybmapname.
c示例程序时要小心.
避免使用可能生成分段错误、调用exit、调用systemcalls、更改UNIX信号或进行任何阻塞调用的代码.
不正确的编码或调用可能会干扰SAPASE服务器引擎.
注意:Sybase不对sybmapname中的编码错误承担任何责任.
编码时应当小心,在不再引用指针之前请检查所有指针,并避免系统调用.
您编写的函数必须为快速名称过滤函数.
不要使用goto语句,因为这些语句可能导致无法预料的副作用,具体取决于平台.
如果使用多个领域,在将用户主管名映射到合适的登录名以反映领域信息要小心.
例如,如果您拥有的两个用户的用户主体名称为userA@REALMONE和userB@REALMTWO,则应将它们分别映射到登录名userA_REALMONE和userB_REALMTWO,而不是userA或userB.
这样可区别两个属于不同领域的用户.
使用Kerberos验证检验SAPASE登录要使用Kerberos验证来检验SAPASE登录,请假设:$SYBASE指的是版本和安装目录.
$SYBASE_ASE指的是服务器二进制文件所在的SAPASE版本目录.
$SYBASE_OCS指的是OpenClient/Server版本目录.
示例1如果客户端的主体名称为user@REALM,并且syslogins表中的对应条目为user_REALM,则可以对sybmapname进行编码以接受输入字符串user@realm,并将此输入字符串转换为输出字符串user_REALM.
示例2sybmapname由SAPASE在运行时装载并使用其逻辑进行必要的映射.
第5章:外部验证安全性管理109以下操作和输出阐释了sybmapname函数.
应将包含syb__map_name()自定义定义的sybmapname.
c文件作为共享对象(或DLL)进行编译和生成,并最终放在合适的路径位置.
在启用了Kerberos安全性机制的情况下启动SAPASE.
对提供标识的加密文件"票证授予票证(TGT)"进行初始化:$/krb5/bin/kinitjohnd@publicPasswordforjohnd@public:$列出TGT:$/krb5/bin/klistCacheType:KerberosV5credentialscacheCacheName:/krb5/tmp/cc/krb5cc_9781Defaultprincipal:johnd@public以"sa"身份登录并验证"johnd"的用户登录名:$$SYBASE/$SYBASE_OCS/bin/isql-Usa-P-Ipwd`/interfaces1>1>sp_displayloginjohnd2>goNologinwiththespecifiednameexists.
(returnstatus=1)1>sp_displayloginJOHND2>goSuid:4Loginame:JOHNDFullname:DefaultDatabase:masterDefaultLanguage:AutoLoginScript:ConfiguredAuthorization:Locked:NOPasswordexpirationinterval:0Passwordexpired:NOMinimumpasswordlength:6Maximumfailedlogins:0Currentfailedloginattempts:Authenticatewith:ANY(returnstatus=0)Kerberos验证成功,使用sybmapname实用程序将小写的johnd映射到大写的JOHND,并允许用户johnd登录到SAPASE:$$SYBASE/$SYBASE_OCS/bin/isql-V-I'pwd'/interfaces1>第5章:外部验证110AdaptiveServerEnterpriseKerberos并发验证SAPASE支持并发Kerberos验证.
如果存在使用Kerberos验证的并发登录,SAPASE将建立多个Kerberos验证会话.
SAPASE15.
0.
3之前的版本在Kerberos验证期间使用锁定机制来保护内部数据结构.
为LDAP用户验证配置SAPASELDAP用户验证允许客户端应用程序将用户名和口令信息发送到SAPASE,以便通过LDAP服务器(而不是syslogins)进行验证.
通过LDAP服务器进行验证时,允许使用全服务器范围的口令,而不使用SAPASE或特定于应用程序的口令.
如果希望对用户管理进行简化和集中,或者要避免用户管理不必要的复杂情况,则LDAP用户验证是您理想的选择.
LDAP用户验证可与符合LDAP协议标准版本3的目录服务器(包括ActiveDirectory、iPlanet和OpenLDAPDirectoryServer)一起使用.
为LDAP用户验证使用以下验证算法之一:用于验证的组合型DN,可用于SAPASE12.
5.
1版或更高版本,或者用于验证的搜索型DN,可用于SAPASE12.
5.
2版及更高版本.
这些算法在获取用户的区分名(DN)的方式上有所不同.
用于LDAP协议的主数据结构为LDAPURL.
LDAPURL会在LDAP服务器上指定一组对象或值.
SAPASE使用LDAPURL来指定用于验证登录请求的LDAP服务器和搜索条件.
LDAPURL使用以下语法:ldapurl::=ldap://host:port/node/attributes[base|one|sub]filter其中:host–是LDAP服务器的主机名.
port–是LDAP服务器的端口号.
node–指定对象层次中搜索开始处的节点.
attributes–是要返回到结果集中的属性列表.
每个LDAP服务器都可能支持不同的属性列表.
base|one|sub–限定搜索条件.
base指定搜索基准节点;one指定搜索基准节点和基准节点下面的一个子级别;sub指定搜索基准节点和所有节点子级别.
第5章:外部验证安全性管理111filter–指定要验证的一个或多个属性.
过滤器可以是简单的,如uid=*,也可以是复合的,如(uid=*)(ou=group).
组合型DN算法以下为使用组合型DN算法时的登录顺序.
1.
OpenClient连接到监听器端口.
2.
监听器接受连接.
3.
OpenClient发送一个内部登录记录.
4.
SAPASE服务器读取登录记录.
5.
SAPASE使用由主URL组成的DN和登录记录中的登录名绑定到LDAP服务器.
此绑定还使用登录记录中的口令.
6.
LDAP服务器对用户进行验证,并返回成功或失败消息.
7.
如果主URL指定一个搜索,那么SAPASE会向LDAP服务器发送搜索请求.
8.
LDAP服务器返回搜索的结果.
9.
根据搜索结果接受或拒绝登录.
搜索型DN算法以下为使用搜索型DN算法时的登录顺序.
1.
OpenClient连接到SAPASE监听器端口.
2.
SAPASE监听器接受连接.
3.
OpenClient发送一个内部登录记录.
4.
SAPASE读取登录记录.
5.
SAPASE通过目录服务器访问帐户绑定到LDAP服务器.
在步骤5和6中建立的连接可能会在来自SAPASE的验证尝试之间持续存在,以便重复使用这些连接进行DN搜索.
6.
LDAP服务器对用户进行验证,并返回成功或失败消息.
7.
SAPASE根据登录记录中的登录名和DN查找URL向LDAP服务器发送搜索请求.
8.
LDAP服务器返回搜索的结果.
9.
SAPASE读取结果以从DN查找URL中获取属性值.
10.
SAPASE将属性值用作登录记录中的DN和口令,以绑定到LDAP服务器.
11.
LDAP服务器对用户进行验证,并返回成功或失败消息.
12.
如果主URL指定一个搜索,那么SAPASE会向LDAP服务器发送搜索请求.
13.
LDAP服务器返回搜索的结果.
14.
SAPASE根据搜索结果接受或拒绝登录.
如果不满足这些验证条件中的任意一个,SAPASE都会向客户端报告常规登录失败.
如果不在主URL字符串或辅助URL字符串中指定搜索条件,就可以跳过步骤12和13.
验证完成,并显示步骤11返回的成功或失败消息.
第5章:外部验证112AdaptiveServerEnterprise在新的SAPASE安装中配置LDAP可以为LDAP验证配置SAPASE.
1.
指定LDAPURL搜索字符串和访问帐户值.
2.
将enableldapuserauth设置为2.
3.
使用LDAP供应商提供的工具将用户添加到LDAP目录服务器中.
4.
使用createlogin添加用户.
也可以使用sp_maplogin自动创建用于验证的登录帐户或应用其它登录控制.
将现有SAPASE服务器迁移到LDAP要避免在现有服务器安装中出现服务中断,请将SAPASE迁移到LDAP.
1.
为SAPASE指定一个LDAPURL搜索字符串.
2.
将配置参数enableldapuserauth设置为1.
3.
将用户添加到LDAP目录服务器中.
4.
将所有用户添加到LDAP服务器时,将enableldapuserauth设置为2,以要求通过LDAP执行所有验证,或者使用sp_maplogin将配置参数替换为登录控制.
LDAP用户验证管理使用sp_ldapadmin创建或列出LDAPURL搜索字符串,验证LDAPURL搜索字符串或登录,并指定访问帐户以及可调优LDAP用户验证(LDAPUA)的相关参数.
必须具有SSO角色才能执行sp_ldapadmin.
组合型DN示例如果使用简单LDAP服务器拓扑和模式,则可以使用组合型DN算法进行用户验证.
如果使用通过商业途径获得的模式(例如,iPlanetDirectoryServer或OpenLDAPDirectoryServer),则会将用户创建为LDAP服务器树上同一容器中的对象,并且SAPASE会根据对象的位置确定用户的DN.
但是,LDAP服务器的模式有以下限制:必须使用唯一地标识要验证的用户的属性名指定过滤器.
必须将过滤器的属性指定为name=*.
星号为通配符.
适合在过滤器中使用的属性名取决于LDAP服务器使用的模式.
登录名与短用户名(如UNIX用户名)相同.
DN使用短用户名,而不使用嵌入空格或标点符号的全名.
例如,jqpublic符合DN限制,而"JohnQ.
Public"不符合这一限制.
iPlanet示例LDAP供应商所使用的对象名、模式和属性与以下示例中所用的对象名、模式和属性可能有所不同.
可能存在许多LDAPURL搜索字符串,有效节点也可能会以本地方式扩展模式,或者以各不相同的方式使用它们:第5章:外部验证安全性管理113此示例使用uid=*过滤器.
要组成DN,SAPASE会将通配符替换为要验证的登录名,并在LDAPURL中将结果过滤器附加到节点参数中.
得到的DN为:uid=myloginname,ou=People,dc=mycomany,dc=com成功完成绑定操作后,将使用连接来搜索等效于登录名的属性名(例如uid):sp_ldapadminset_primary_url,'ldap://myhost:389/ou=People,dc=mycompany,dc=comsubuid=*'此示例使用OpenLDAP2.
0.
25中定义的模式,属性名为cn.
组合型DN为cn=myloginname,dc=mycompany,dc=com:sp_ldapadminset_primary_url,'ldap://myhost:389/dc=mycompany,dc=comsubcn=*'搜索型DN示例通过搜索型DN,可以使用不符合组合型DN算法使用限制的ActiveDirectory服务器或其它LDAP服务器环境.
使用Windows2000Server中通过商业途径获得的用户模式,对ActiveDirectory服务器执行以下步骤.
1.
设置访问帐号信息:sp_ldapadminset_access_acct,'cn=AdminAccount,cn=Users,dc=mycompany,dc=com','AdminAccountsecretpassword'2.
设置主URL:sp_ldapadminset_primary_url,'ldap://hostname:389/3.
设置DN查找URL搜索字符串:sp_ldapadminset_dn_lookup_url,'ldap://hostname:389/cn=Users,dc=mycompany,dc=comdistinguishedNameonesamaccountname=*'在Windows2000上,短名称通常称为"用户登录名",并在缺省模式下被赋予属性名samaccountname.
这是用于匹配登录名的属性名.
用户的DN中包含一个带有标点符号和嵌入空格的全名(例如,cn=JohnQ.
Public,cn=Users,dc=mycomany,dc=com).
Windows上的DN不使用短名称,因此对于将ActiveDirectory模式(缺省值)用作LDAP服务器的节点而言,搜索型DN算法较合适.
主URL不指定搜索,而是依赖于绑定操作进行验证.
使用搜索过滤器限制访问的示例可以使用LDAPURL搜索字符串来限制对LDAP服务器上用户组的访问.
例如,要限制accounting组中用户的登录,可使用组合过滤器来限制对该用户组的访问,其中用户组的属性为group=accounting.
以下LDAPURL字符串对iPlanet服务器使用组合型DN算法:sp_ldapadminset_primary_url,'ldap://myhost:389/ou=People,dc=mycompany,dc=comsub(&(uid=*)(group=accounting))'SAPASE与DNuid=mylogin,ou=People,dc=mycompany,dc=com绑定在一起.
成功绑定到此标识后,它会搜索以下内容:第5章:外部验证114AdaptiveServerEnterprise"ou=People,dc=mycompany,dc=comsub(&(uid=mylogin)(group=accounting))"如果此搜索返回任何对象,则表明验证成功.
以下示例将LDAPURL字符串用于组合过滤器:sp_ldapadminset_primary_url,'ldap://myhost:389/ou=people,dc=mycompany,dc=comsub(&(uid=*)(ou=accounting)(l=SantaClara))'sp_ldapadmin,set_primary_url,'ldap://myhost:389/ou=people,dc=mycompany,dc=comsub(&(uid=*)(ou=Human%20Resources))'LDAP用户验证口令信息的更改存在两种与LDAP用户验证相关的信息性消息,SAPASE从LDAP服务器获取这些消息并将消息传递到客户端.
在使用LDAP验证机制登录到SAPASE时,如果LDAP用户验证口令即将到期,您将看到:Yourpasswordwillexpireindays.
在LDAP服务器管理员重置了口令或LDAP服务器口令已经到期之后,如果尝试使用LDAP验证机制登录到SAPASE,则会看到4002消息:Loginfailed如果启用了审计并且打开了errors审计选项,则会将消息4099发送到审计日志:YourLDAPpasswordhasexpired.
注意:请配置LDAP服务器以提供此附加信息.
此外,SAPASE必须支持将LDAP口令控制传送到LDAP客户端.
故障切换支持如果由主URL指定的LDAP目录服务器出现严重故障,并且该服务器不再对网络请求做出响应,则SAPASE会尝试连接到由辅助URL指定的辅助LDAP目录服务器.
SAPASE使用LDAP函数ldap_init确定它能否打开与LDAP目录服务器的连接.
Null或无效的主URL字符串会导致SAPASE服务器尝试将故障切换到辅助URL.
LDAP绑定或搜索操作返回的故障不会导致将故障切换到辅助URL.
登录名和LDAP用户帐户一旦启用了LDAP用户验证,选择并设置了验证算法和URL字符串,就必须配置用户帐户.
LDAP管理员在LDAP服务器中创建和维护帐户,数据库管理员在SAPASE中创建和维护帐户.
或者,在将SAPASE与外部验证机制(如LDAP服务器)集成时,数据库管理员也可以选择允许灵活使用登录帐户的管理选项.
数据库管理员可以继续使用传统命令和过程来管理帐户角色、缺省数据库、缺省语言以及其它特定于登录名的属性.
第5章:外部验证安全性管理115通过LDAP对syslogins进行的更新介绍了登录时SAPASE对syslogins表进行的更新.
这些更新假定已配置LDAP用户验证,未限制登录使用LDAP,并且未设置createlogin映射.
以下内容是根据LDAP对syslogins进行的更新:syslogins中是否存在行LDAP服务器验证是否成功syslogins中的更改否是无更改,登录失败否否无更改,登录失败是是如果口令已更改,则更新行是否无更改辅助查找服务器支持为通过LDAP服务器进行验证的客户端提供不间断的支持.
您可以指定辅助LDAP查找服务器,当LDAP服务器发生故障或当计划的关机时间到来时可从主LDAP服务器故障切换到辅助服务器.
通过以下状态监视URL的运行状况:INITIAL(初始)–表示未配置LDAP用户验证.
RESET(重置)–表示已使用管理命令输入了URL.
READY(就绪)–表示URL已准备好接受连接.
ACTIVE(活动)–表示URL已成功执行LDAP用户验证.
FAILED(失败)–表示连接LDAP服务器时出现问题.
SUSPENDED(挂起)–表示URL处于维护模式,并且不会再使用它.
以下事件序列描述了故障切换和手动故障恢复:1.
主URL组和辅助URL组都已配置并且处于READY状态.
2.
已使用主服务器基础结构验证连接.
3.
主服务器故障,并且其状态变为FAILED.
4.
通过辅助服务器基础结构,连接自动开始验证.
5.
LDAP管理员修复了主服务器并使其恢复到联机状态.
管理员将主LDAP服务器状态更改为READY.
6.
已使用主服务器验证了新连接.
注意:一旦SAPASE服务器将故障切换到辅助LDAP服务器,数据库管理员则必须手动激活主LDAP服务器,然后才能重新使用主服务器.
如果SAPASE在连接到LDAP服务器时发生错误,则会尝试进行三次验证.
如果错误仍然存在,则会将LDAP服务器标记为FAILED.
使用sp_ldapadmin配置辅助查找LDAP服务器.
第5章:外部验证116AdaptiveServerEnterprise若要设置辅助DN查找URL,请输入:sp_ldapadminset_secondary_dn_lookup_url,若要设置辅助DN查找URL的管理访问帐户,请输入:sp_ldapadminset_secondary_access_acct,,若要挂起对主URL验证或辅助URL验证的使用,请输入:sp_ldapadminsuspend,{primary|secondary}若要激活主URL验证或辅助URL验证的设置,请输入:sp_ldapadminactivate,{primary|secondary}若要显示有关主/辅LDAP服务器设置和状态的详细信息,请输入:sp_ldapadminlistsp_ldapadminlist结合了list_access_acct和list_urls先前的输出.
它具有以下有关于主服务器和辅服务器的所需输出:搜索URL区分名查找URL访问帐户DN活动[true|false]状态[ready|active|failed|suspended|reset]若要显示辅助服务器的DN查找URL,请输入:sp_ldapadminlist_urls若要显示辅助DN查找URL的管理访问帐户,请输入:sp_ldapadminlist_access_acct若要显示子命令,请输入:sp_ldapadminhelpLDAP服务器状态转换使用sp_ldapadmin命令显示LDAP服务器状态转换.
表6.
执行sp_ldapadminset_URL时的状态转换初始状态最终状态INITIALRESETRESETRESETREADYREADYACTIVERESETFAILEDRESETSUSPENDEDRESETset_URL表示以下命令中的其中之一第5章:外部验证安全性管理117set_dn_lookup_urlset_primary_urlset_secondary_dn_lookup_urlset_secondary_url表7.
执行sp_ldapadminSuspend时的状态转换初始状态最终状态INITIALErrorRESETSUSPENDEDREADYSUSPENDEDACTIVESUSPENDEDFAILEDSUSPENDEDSUSPENDEDSUSPENDED表8.
执行sp_ldapadminActivate时的状态转换初始状态最终状态INITIALErrorRESETREADYREADYREADYACTIVEACTIVEFAILEDREADYSUSPENDEDREADY下表显示了由SAPASE隐式执行的LDAP服务器状态转换.
表9.
重新启动SAPASE时的状态转换初始状态最终状态INITIALINITIALRESETRESETREADYREADYACTIVEREADYFAILEDFAILEDSUSPENDEDSUSPENDED第5章:外部验证118AdaptiveServerEnterprise如果LDAP服务器处于READY或ACTIVE状态,则SAPASE只尝试LDAP登录.
表10.
LDAP登录成功时的状态转换初始状态最终状态READYACTIVEACTIVEACTIVE表11.
LDAP登录失败时的状态转换初始状态最终状态READYFAILEDACTIVEFAILEDLDAP用户验证调优可根据传入连接和SAPASE/LDAP服务器基础结构的负载对SAPASE选项进行配置和调优.
可根据并发传入请求的数量来配置这些选项:使用sp_configure设置maxnativethreads,它指定了每个引擎的本机线程数.
使用sp_ldapadmin配置max_ldapua_native_threads,它指定了每个引擎的LDAP用户验证本机线程数.
根据网络和SAPASE/LDAP服务器基础结构的运行状况配置set_timeout选项(该选项指示LDAP服务器绑定和搜索超时).
配置set_abandon_ldapua_when_full选项,以指定传入连接使用了max_ldapua_native_threads时的行为:使用这些sp_ldapadmin选项配置LDAP服务器以获得更好的性能:set_max_ldapua_desc–管理LDAPUA连接请求的并发性.
如果使用区分名算法,则将set_max_ldapua_desc设置为较大的数可加快SAPASE正在处理的LDAPUA连接.
set_num_retries–设置尝试次数.
依据SAPASE和LDAP服务器之间的瞬时错误数调优此数值.
可通过配置重试次数来取消瞬时错误.
set_log_interval–控制出于诊断目的发送到错误日志的消息数.
使用较低的数值会使错误日志杂乱,但有助于确定具体错误.
如果使用较大的数值,则会减少发送到错误日志的消息数,但研究价值却不如前者.
依据错误日志大小来调优set_log_interval.
第5章:外部验证安全性管理119对登录映射添加更严格的控制通过sp_maplogin将使用LDAP或PAM进行验证的用户映射到本地登录.
注意:要映射使用Kerberos进行验证的用户,请使用sybmapname,而不是sp_maplogin.
只有具有sso_role的用户才可以使用sp_maplogin创建或修改登录映射.
SAPASE避免了登录的验证机制设置和使用该登录的映射之间的冲突.
潜在的映射冲突由存储过程sp_maplogin或者命令alterlogin或createlogin进行检测.
这些控制不允许进行以下映射:从一个登录名映射到另一个登录名从已经作为本地登录名存在的外部名称映射到不存在的登录名此外,如果验证机制是使用映射指定的,则该机制应与目标登录名中设定的验证机制相符.
如果目标登录的验证机制限制登录使用某个特定的验证机制,则使用映射指定的机制必须与为该登录指定的验证机制相匹配,或者与"ANY"验证机制相匹配.
当sp_maplogin检测到存在冲突时,sp_maplogin将失败,并报告错误,指出所发生的冲突.
同样,alterlogin和createlogin将检查是否存在某个可能与用户登录的authenticatewith选项存在冲突的映射.
当alterlogin或createlogin检测到冲突时,则会报告一条错误,指出与登录映射存在的任何冲突.
示例1将LDAP用户映射到"sa"登录.
某公司采用了LDAP作为其所有用户帐户的存储库,且其安全性策略要求对所有用户进行LDAP验证,其中包括可能管理数百台服务器的数据库管理员"adminA"和"adminB".
已启用审计,并且登录事件记录在审计追踪中.
若要将这些管理员帐户映射到"sa",请输入:sp_maploginLDAP,'adminA','sa'gosp_maploginLDAP,'adminB','sa'go要求所有用户使用LDAP验证进行验证:sp_configure'enableldapuserauth',2go当"adminA"在登录到服务器期间进行验证时,将在登录审计事件中记录与"adminA"关联的区分名,而不是仅记录"sa".
这可以让每个单独执行的操作在审计追踪中标识出来.
第5章:外部验证120AdaptiveServerEnterprise由于"adminA"和"adminB"的口令是在LDAP服务器中设置的,因此无需在所有管理的服务器中都保留"sa"口令.
此示例还允许在验证时使用不同的外部标识和口令,尽管它们在服务器中的操作仍然需要与"sa"帐户关联的特殊特权.
示例2结合使用PAM和LDAP将用户映射到应用程序登录.
某公司同时采用了PAM和LDAP验证,但分别用于不同的目的.
公司的安全性策略将LDAP定义为一般用户帐户的验证机制,将PAM定义为特殊用户(例如中间层应用程序用户)的验证机制.
中间层应用程序可以建立一个到SAPASE的连接池,以处理代表中间层应用程序用户的请求.
为LDAP和PAM用户验证配置SAPASE:sp_configure'enableldapuserauth',2gosp_configure'enablepamuserauth',2go在本地建立一个登录名appX,并使其具有与中间层应用程序相适应的权限:createloginappXwithpasswordmyPasswordgoalterloginappXauthenticatewithPAMgo这种验证机制并不采用在"appX"中硬编码一个简单口令,然后使该口令在几个不同的服务器中保持一致的方法,而是开发了一个自定义PAM模块,该模块通过其它事实来验证中央存储库中的应用程序,以验证中间层应用程序的身份.
客户端应用程序登录名"appY"需要使用用户的LDAP标识和口令对用户进行LDAP验证.
使用sp_maplogin将所有经过LDAP验证的用户映射到登录名"appY",createloginappYwithpasswordmyPasswordgosp_maploginLDAP,NULL,'appY'go登录名为"appY"的用户将通过其公司标识和口令接受验证,然后被映射到一个本地的登录名"appY",以执行数据库操作.
验证是使用记录在审计追踪中的LDAP用户标识来进行的,数据库操作则是通过与应用程序登录名"appY"相适应的权限来执行的.
外部验证的登录映射配置外部验证机制时,如果只有一个外部用户到内部登录的映射,并且已成功对该映射进行验证,则将更新内部登录的口令以匹配外部用户的口令.
例如:1.
用户具有登录名user_ase(口令为user_password)和LDAP登录名user_ldap(口令为user_ldappasswd).
第5章:外部验证安全性管理121这会生成user_ldap到user_ase的一对一映射.
2.
user_ldap使用user_ldappassword登录到服务器时,user_ase的口令将更新为user_ldappassword将登录名映射到LDAP口令的好处是:如果LDAP服务器崩溃,用户可以用最近使用的LDAP口令进行登录.
也就是说,当用户针对验证具有用户名到LDAP口令的一对一映射时,用户似乎具有了不间断的验证,因为当口令用于验证登录时,会在本地进行更新.
但是,当多个外部用户映射到本地用户时,将不在本地更新口令.
如果LDAP服务器崩溃,则无法将多个外部用户映射到单个用户.
LDAP用户验证错误的故障排除SAPASE在与LDAP服务器通信时可能会发生以下瞬时错误.
通常,重新尝试连接可解决这些错误.
如果重新尝试三次后错误仍然存在,则SAPASE将该LDAP服务器标记为FAILED.
LDAP_BUSY–服务器繁忙.
LDAP_CONNECT_ERROR–连接过程中发生错误.
LDAP_LOCAL_ERROR–客户端发生错误.
LDAP_NO_MEMORY–无法在客户端分配内存.
LDAP_OPERATIONS_ERROR–服务器端发生错误.
LDAP_OTHER–未知错误代码.
LDAP_ADMINLIMIT_EXCEEDED–搜索超出限制.
LDAP_UNAVAILABLE–服务器无法处理请求.
LDAP_UNWILLING_TO_PERFORM–服务器将不会处理请求.
LDAP_LOOP_DETECT–在引用过程中检测到循环.
LDAP_SERVER_DOWN–无法访问服务器(连接失败).
LDAP_TIMEOUT–LDAPAPI因操作未在用户指定的时间内完成而失败.
瞬时错误和大量并发登录请求可能会导致错误日志中出现大量重复的错误消息.
为提高日志的可读性,使用了以下错误消息记录算法:1.
如果是第一次记录某消息,则会记录它.
2.
如果上次记录该消息的时间大于3分钟,则执行以下操作:记录该错误消息.
记录自上次打印该消息以来该消息的重复次数.
以分钟为单位记录自输出该消息以来经过的时间.
因以下问题而导致的验证失败不视为LDAP错误,并且此类验证失败也不是重新尝试验证请求的条件:由于口令错误或区分名无效而导致的绑定失败.
成功绑定后的搜索所返回的结果集为0或未返回任何属性值.
第5章:外部验证122AdaptiveServerEnterprise分析URL时发现的语法错误是在设置LDAPURL时捕获的,因此不能归于上述任何类别.
配置LDAP服务器轻量目录访问协议(LDAP)的用户验证支持安全套接字层/传送层安全性(SSL/TLS)协议,从而能够在SAPASE和LDAP服务器之间安全地传输数据.
1.
确保所有受托根证书均位于同一文件中.
定义受托服务器后,将配置安全连接,其中servername是当前服务器的名称.
如果:定义了$SYBASE_CERTDIR,将从$SYBASE_CERTDIR/servername.
txt(UNIX)或%SYBASE_CERTDIR%\servername.
txt(Windows)装载证书.
未定义$SYBASE_CERTDIR,将从$SYBASE/$SYBASE_ASE/certificates/servername.
txt(UNIX)或%SYBASE%\%SYBASE_ASE%\certificates\servername.
txt(Windows)装载证书.
2.
重新启动服务器以更改受托根证书文件.
3.
使用sp_ldapadmin(同时指定ldaps://URL,而不是ldap://URL)建立到LDAP服务器安全端口的安全连接.
4.
通过简单的TCP连接建立TLS会话:sp_ldapadmin'starttls_on_primary',{true|false}或者sp_ldapadmin'starttls_on_secondary',{true|false}注意:LDAP服务器连接没有connecttimeout选项;如果LDAP服务器停止响应,则所有登录连接也将停止响应.
LDAP用户验证命令reinit_descriptors可解除绑定LDAP服务器描述符,并重新初始化用户验证子系统.
此命令需要系统安全员权限.
如果具有系统安全员权限的用户在未执行此命令的情况下修改了证书颁发机构(CA)受托根文件,则管家实用程序杂事任务将使用新的杂事(旨在每隔60分钟重新初始化一次用户验证子系统).
SAPASE支持修改受托根文件,因此不必重新启动服务器.
第5章:外部验证安全性管理123自动LDAP用户验证和故障恢复SAPASE为辅助LDAP服务器提供支持.
sp_ldapadminset_failback_interval中的set_failback_interval选项设置激活出现故障的LDAP服务器的两次尝试之间的时间间隔;如果不设置此参数,则缺省值为15分钟.
请参见《参考手册:过程》中的"sp_ldapadmin".
如果主URL标记为FAILED,则管家任务将尝试使用主访问帐户区分名(DN)和口令将其激活.
如果尚未配置主访问帐户,则管家任务将尝试使用匿名绑定.
如果绑定操作在第一次尝试时失败,则管家任务将按配置的重试次数重试绑定操作.
如果绑定操作成功,则将主URL标记为READY.
如果辅助URL标记为FAILED,则管家任务将尝试按类似的方式激活辅助URL.
sp_ldapadmin中的reinit_descriptors选项在修改证书文件时执行,在这种情况下,它将每隔60分钟重新初始化一次LDAP用户验证子系统.
设置故障恢复间隔之后,管家任务将在每次执行其各项杂事时检查是否存在出现故障的LDAP服务器.
如果找到出现故障的LDAP服务器,它将尝试在故障恢复时间间隔到期时激活LDAP服务器.
LDAP故障恢复时间间隔要自动激活LDAP服务器,请使用'set_failback_interval'.
语法为:sp_ldapadmin'set_failback_interval',time_in_minutes其中:time_in_minutes为从-1到1440分钟(24小时)的值:值为0则表示手动进行故障恢复.
也就是说,管家任务不会尝试自动对LDAP服务器进行故障恢复.
您必须手动执行此任务.
如果值为-1,则将故障切换时间间隔设置为15分钟(缺省值).
如果不带任何参数发出sp_ldapadmin'set_failback_interval',则sp_ldapadmin将显示为故障恢复时间间隔设置的值.
如果不带任何参数发出sp_ldapadmin,则sp_ldapadmin将在输出中包括故障恢复时间间隔:sp_ldapadminPrimary:URL:''DNLookupURL:''AccessAccount:''Active:'FALSE'Status:'NOTSETStartTLSonPrimaryLDAPURL:'TRUE'第5章:外部验证124AdaptiveServerEnterpriseSecondary:URL:''DNLookupURL:''AccessAccount:''Active:'FALSE'Status:'NOTSET'StartTLSonSecondaryLDAPURL:'FALSE'Timeoutvalue:'-1'(10000)millisecondsLoginterval:'3'minutesNumberofretries:'3'MaximumLDAPUAnativethreadsperEngine:'49'MaximumLDAPUAdescriptorsperEngine:'20'AbandonLDAPuserauthenticationwhenfull:'false'Failbackinterval:'-1'(15)minutes(returnstatus=0)此示例将LDAP故障恢复时间间隔设置为60分钟:sp_ldapadmin'set_failback_interval'60此示例将LDAP故障恢复时间间隔设置为缺省值15分钟:sp_ldapadmin'set_failback_interval'-1此示例显示为故障恢复时间间隔设置的值:sp_ldapadmin'set_failback_interval'TheLDAPproperty'set_failback_interval'issetto'15minutes'.
为使用PAM的验证配置SAPASE可插入验证模块(PAM)支持允许将多个验证服务模块叠加在一起,而无需修改需要验证的应用程序.
PAM将SAPASE与Solaris和Linux操作系统集成在一起,并且简化了对用户帐户和验证机制的管理,从而降低了总拥有成本.
用户可以自定义或编写他们自己的验证及授权模块.
注意:Linux和Solaris平台上目前提供了PAM支持.
有关PAM用户验证的详细信息,请参见操作系统文档.
第5章:外部验证安全性管理125SAPASE将登录名和从登录包中获得的证书传递给PAMAPI.
PAM装载在操作系统配置文件中指定的一个服务提供程序模块,并调用相应的函数来完成验证过程.
在SAPASE中启用PAMLinux和Solaris中都包含预定义的PAM模块.
可以使用这些模块之一,也可以创建自己的模块.
在创建自己的模块时,请按照操作系统文档中有关创建PAM模块的指南进行操作.
注意:您创建的PAM模块应符合RFC86.
0"UnifiedLoginWithPluggableAuthenticationModules(PAM)".
SAPASE支持RFC的验证管理模块.
它不支持帐户管理模块、会话管理模块或口令管理模块.
配置操作系统配置操作系统以启用PAM支持.
对于Solaris,将下面的行添加到/etc/pam.
conf:aseauthrequired/user/lib/security/$ISA/pam_unix.
so.
1对于Linux,创建一个名为/etc/pam.
d/ase的新文件,并添加:authrequired/lib/security/pam_unix.
so有关如何创建这些条目的详细信息,请参见操作系统文档.
在同一计算机上运行32位和64位服务器$ISA是一个允许32位和64位库同时运行的环境变量.
在Solaris32位计算机上,用一个空字符串替换$ISA;而在64位计算机上,则用字符串"sparcv9"替换$ISA.
若要同时运行32位和64位服务器,请将32位PAM模块放在一个目录中,然后将64位版本放到该目录的一个子目录中.
pam.
conf中的条目应该与以下内容类似:$ls/usr/lib/security/pam_sec.
so.
1pam_sec.
so.
1->/SYBASE/pam_whatever_32bits.
so.
1第5章:外部验证126AdaptiveServerEnterprise$ls/usr/lib/security/sparcv9/pam_sec.
so.
1pam_sec.
so.
1->/SYBASE/pam_sec_64bits.
so.
1aseauthrequired/usr/lib/security/$ISA/pam_sec.
so.
1注意:$ISA是pam.
conf中允许的唯一变量.
为PAM用户验证配置SAPASEenablepamuserauth启用PAM用户验证支持.
语法为:sp_configure"enablepamuserauth",0|1|2其中:0–表示禁用PAM验证.
这是缺省值.
1–表示SAPASE将首先尝试进行PAM验证,如果PAM验证失败,则使用syslogins验证.
2–表示只能使用PAM验证.
注意:启用PAM后,口令管理被委派给PAM服务提供程序.
登录名和PAM用户帐户在设置了enablePAMuserauthentication并完成了对SAPASE和操作系统的PAM配置之后,必须配置用户帐户.
操作系统或网络安全管理员会在PAM服务提供程序中创建和维护用户帐户,数据库管理员会在SAPASE中创建和维护用户帐户.
或者,在将SAPASE与外部验证机制(如PAM)集成时,数据库管理员也可以选择允许灵活使用登录帐户的管理选项.
数据库管理员可以继续使用传统命令和过程来管理帐户角色、缺省数据库、缺省语言以及其它特定于登录名的属性.
下表介绍了登录时对syslogins进行的更新.
假定已配置PAM用户验证,允许使用PAM进行登录,并且没有设置createlogin映射syslogins中是否存在行PAM验证是否成功syslogins中的更改否是无更改,登录失败否否无更改,登录失败是是如果口令已更改,则更新行是否无更改第5章:外部验证安全性管理127增强的登录控制根据前面LDAP和PAM部分中讨论的方法,将SAPASE配置为允许使用全服务器范围的验证机制.
还可以使用增强的登录控制来配置SAPASE以为对该服务器上每个单独的登录分别指定验证机制.
当服务器在两种验证机制之间转换时,特定于登录的控制会很有用,对于本地服务器管理可能需要的特定于服务器的登录,特定于登录的控制也可能很有用;它们不与集中管理的用户登录关联.
强制验证通过使用alterlogin和createlogin,可以强制登录使用特定的验证过程将以下参数用于alterlogin和createlogin:ASE–通过syslogins表中的口令使用SAPASE内部验证.
LDAP–通过LDAP服务器使用外部验证.
PAM–通过PAM使用外部验证.
ANY–缺省情况下,使用此验证方法对用户进行验证.
使用ANY验证的用户意味着SAPASE将检查是否已经定义了外部验证机制,如果已定义,则使用该外部验证机制.
否则,将使用SAPASE验证.
SAPASE按照以下顺序检验外部验证机制:1.
LDAP.
2.
可插入验证模块(PAM).
如果同时启用了LDAP和PAM,则决不会尝试对用户进行PAM验证.
3.
如果PAM和LDAP都没有启用,则SAPASE将使用syslogins对登录进行验证.
继续使用syslogins目录验证登录帐户(例如"sa").
只有SSO角色可以设置对登录的验证.
例如,以下命令使用alterlogin验证登录:alterloginnightlyjobmodifyauthenticatewithASEsp_displaylogin"nightlyjob"显示类似以下内容的输出:Suid:1234Loginname:nightlyjobFullname:BatchLoginDefaultDatabase:master.
.
.
DateofLastPasswordChange:Oct220037:38PMPasswordexpirationinterval:0第5章:外部验证128AdaptiveServerEnterprisePasswordexpired:NMinimumpasswordlength:Maximumfailedlogins:0Currentfailedloginattempts:Authenticatewith:ASE使用sp_maplogin映射登录使用sp_maplogin映射登录.
语法为:sp_maplogin(authentication_mech|null),(client_username|null),(action|login_name|null)此示例将外部用户"jsmith"映射为用户"guest".
一旦通过验证,"jsmith"就具有了"guest"的特权.
审计登录记录同时显示client_username和用户名:sp_maploginNULL,"jsmith","guest"如果尚未创建登录,则本示例将为所有使用LDAP进行验证的外部用户新建一个登录:sp_maploginLDAP,NULL,"createlogin"有关详细信息,请参见《参考手册:过程》.
显示映射信息sp_helpmaplogin显示映射信息.
语法为:sp_helpmaplogin[(authentication_mech|null),(client_username|null)]其中:client_username–是外部用户名.
如果未包括任何参数,则sp_helpmaplogin会显示有关当前登录到SAPASE的所有用户的登录信息.
可以使用上面列出的参数,将输出限制到客户端用户名或验证机制的特定集合.
以下显示了所有登录的相关信息:sp_helpmaploginauthenticationclientnameloginnameNULLjsmithguestLDAPNULLcreatelogin第5章:外部验证安全性管理129确定验证机制使用@@authmech全局变量确定SAPASE使用的验证机制.
例如,如果允许SAPASE使用具有故障切换功能的LDAP用户验证(enableldapuserauth=2),并且用户"Joe"为外部用户且验证机制设置为ANY,则当Joe登录时,SAPASE会尝试使用LDAP用户验证对Joe进行验证.
如果Joe未能作为LDAP中的用户通过验证,则SAPASE会使用SAPASE验证对Joe进行验证;如果验证成功,则Joe可以成功登录.
@@authmech全局变量值为:select@@authmechase如果将SAPASE配置为严格的LDAP用户验证(enableldapuserauth=2),并将Joe作为有效用户添加到LDAP中,则当Joe登录时,@@authmech的值为:select@@authmechldap第5章:外部验证130AdaptiveServerEnterprise第6章管理用户权限自由选择访问控制(DAC)允许基于用户标识、组成员资格和活动角色限制对对象和命令的访问.
因为具有某种访问权限的用户(例如对象所有者)可以选择是否将这种访问权限传递给其他用户,所以此类控制是"自由选择"的.
自由选择访问控制系统可识别以下用户类型:拥有一个或多个系统定义的角色的用户:系统管理员、系统安全员、操作员和其它角色数据库所有者数据库对象所有者其他用户系统管理员(具有sa_role的用户)在DAC系统之外操作,并且在任何时候对所有数据库对象(加密密钥除外)都具有访问权限(请参见《加密列用户指南》).
系统安全员可始终访问sybsecurity数据库中的审计追踪表,以跟踪系统管理员的访问.
如果拥有sa_role,并在master数据库中发出了grant命令,则all会授予createdatabase、settracing和connect权限.
数据库所有者不能自动接受其他用户所拥有对象的权限;但可以:通过setuser命令来假定数据库中某个用户的身份,可以临时获得此用户的所有权限.
通过setuser命令来假定某个对象所有者的身份,并使用grant命令授予此对象的所有权限,可以永久获得此特定对象的权限.
对象所有者可以将这些对象的访问权限授予其他用户,也可以授予其他用户将访问权限再传递给其他用户.
可以使用grant命令授予用户、组和角色各种权限,也可使用revoke命令撤消这些权限.
使用grant和revoke授予用户权限以:创建数据库在数据库内创建对象执行特定命令,如dbcc和setproxy访问指定的表、视图、存储过程、加密密钥和列grant和revoke还可以用于设置系统表的权限.
对于"Public"的缺省权限,不需要使用grant或revoke语句.
某些命令可由任何用户随时使用,而不需要任何权限.
其它命令则只能由特定状态的用户使用,且不能移交给其他用户使用.
安全性管理131是否能为可授权和撤消的命令分配权限取决于各个用户的角色或状态(例如作为系统管理员、数据库所有者、系统安全员或数据库对象所有者)以及是否已授予用户一个角色,此角色有权将此权限授予其他用户.
还可以使用视图和存储过程作为安全性机制.
启用细化权限时,操作可能有所不同.
另请参见视图和存储过程作为安全性机制(第153页)第8章,「细化权限」(第199页)授予创建数据库的权限只有系统管理员才能授权使用createdatabase命令.
接受createdatabase权限的用户还必须是master数据库的有效用户,因为所有数据库都是在使用master时创建的.
在多数安装情况下,系统管理员保留对createdatabase权限的独占,以便对数据库的放置和数据库设备空间分配进行集中控制.
在这些情况下,系统管理员代表其他用户创建新的数据库,然后将所有权移交给相关用户.
1.
在master数据库中发出createdatabase命令.
2.
使用use命令切换到新数据库.
3.
执行sp_changedbowner.
更改数据库所有权使用sp_changedbowner更改数据库的所有权.
通常,系统管理员先创建用户数据库,在完成某些初始工作后再将所有权授予另一用户.
只有系统管理员才能执行sp_changedbowner.
Sybase建议您在用户尚未添加到数据库中,且用户还未开始在数据库中创建对象之前,移交所有权.
新的所有者必须在服务器中已具有一个登录名,但不能是该数据库的用户,也不能在该数据库中有别名.
在可以更改数据库的所有权之前,可能需要先使用sp_dropuser或sp_dropalias;在可以删除用户之前,可能需要删除某些对象.
在要更改所有权的数据库中发出sp_changedbowner.
语法为:sp_changedbownerloginame[,true]以下示例使"albert"作为当前数据库的所有者,并删除作为旧的"dbo"的用户的别名:sp_changedbowneralbert请包括true参数以将别名及其权限移交给新的"dbo".
第6章:管理用户权限132AdaptiveServerEnterprise注意:不能更改master、model、tempdb或sybsystemprocs数据库的所有权,并且不应更改任何其它系统数据库的所有权.
数据库所有者特权数据库所有者具有在该数据库内执行任何操作的全部特权,必须使用grant命令将权限显式授予其他用户.
数据库所有者和系统管理员是唯一能够向其他用户授予对象创建权限(createencryptionkey和createtrigger权限除外,这两个权限只能由系统安全员授予)的用户.
以下命令的使用权限自动授予数据库所有者,不能移交给其他用户:checkpointdbccalterdatabaseonlinedatabasedropdatabasedumpdatabasedumptransactiongrant(对象创建权限)loaddatabaseloadtransactionrevoke(对象创建权限)setuser数据库所有者可授予或撤消执行以下操作的权限:使用以下命令:createdefault、createprocedure、createrule、createtable、createview.
如果数据库所有者拥有sa_role并位于master数据库中,则他们可授予使用createdatabase、settracing和connect的权限.
all–如果您是数据库所有者,则all会授予除createdatabase、createtrigger和createencryptionkey之外的所有create命令的权限.
系统表的缺省权限使用dbcc命令:checkalloc、checkcatalog、checkdb、checkindex、checkstorage、checktable、checkverify、fix_text、indexalloc、reindex、tablealloc、textalloc、tune由对象所有者、数据库所有者、已通过grant选项授权的用户、系统管理员或系统安全员授予其他数据库用户权限或撤消其权限.
这些用户由用户名、组名或关键字public指定.
所有用户都将在激活分配给他们的角色后继承对这些角色授予的权限.
第6章:管理用户权限安全性管理133数据库对象所有者特权创建数据库对象(表、视图、加密密钥或存储过程)的用户拥有该对象,并自动授予所有对象访问权限.
对于除对象所有者以外的用户(包括数据库所有者在内),不向他们自动授予此对象的所有权限,除非对象所有者或具有此对象的grant权限的用户对其显示授权.
举例如下,假设Mary是pubs2数据库的所有者,并且已授予Joe在此数据库中创建表的权限.
现在,Joe创建了new_authors表,则他就是此数据库对象的所有者.
最初,只有Joe具有new_authors的对象访问权限.
Joe可以将此表的对象访问权限授予其他用户或撤消此权限.
以下对象更改权限缺省为表的所有者,并且不能移交给其他用户:altertabledroptablecreateindex使用grant和revoke命令将特定数据库对象的select、insert、update、delete、references、decrypt,truncatetable、updatestatistics、deletestatistics和execute权限授予特定用户的权限,可使用grantwithgrantoption命令将此权限移交给其他用户.
对对象(表、视图、索引、存储过程、规则、加密密钥、触发器或缺省值)执行drop命令的权限,在缺省情况下将授予给对象所有者,且不能移交给其他用户.
系统过程的权限在存储系统过程的sybsystemprocs数据库中,设置系统过程的权限.
与安全性相关的系统过程只能由系统安全员运行.
其它某些系统过程只能由系统管理员运行.
某些系统过程只能由数据库所有者运行.
这些过程可以确保执行过程的用户是从中执行这些过程的数据库的所有者.
其它系统过程可由已授予权限的任何用户执行.
用户在所有数据库中都必须具有执行系统过程的权限,或者在任一数据库中都不具有这一权限.
sybsystemprocs.
.
sysusers中未列出的用户在sybsystemprocs中被视为"guest",并被自动授予多个系统过程的权限.
要拒绝向用户授予系统过程权限,系统管理员必须将此用户添加到sybsystemprocs.
.
sysusers中,并发出适用于该过程的revoke语句.
用户数据库的所有者不能从自己的数据库内部直接控制系统过程的权限.
第6章:管理用户权限134AdaptiveServerEnterprise授予或撤消权限使用grant和revoke命令控制权限.
这些权限使用grant和revoke命令进行控制:对象访问权限选择函数的权限执行命令的权限(P)执行dbcc命令的权限执行某些set命令的权限系统表的缺省权限每个数据库都有自己独立的保护系统.
在某个数据库中有权使用某一命令并不意味着也有权在其它数据库中使用同一命令.
对象访问权限对象访问权限控制访问某些数据库对象的某些命令的使用.
例如,必须显式授予用户对authors表使用select命令的权限.
对象访问权限由对象所有者(以及系统管理员或系统安全员)授予和撤消,他们可以将这些权限授予其他用户.
表12.
权限及其适用对象权限对象select表、视图和列update表、视图和列insert表和视图delete表和视图references表和列execute存储过程truncatetable表deletestatistics表updatestatistics表decrypt表、视图和列select加密密钥references权限指的是可在altertable或createtable命令中指定的参照完整性约束.
decrypt权限指的是对加密列进行解密所需的权限.
加密密钥的select权限指的是在第6章:管理用户权限安全性管理135createtable、altertable或selectinto命令中使用加密密钥对列进行加密所需的权限.
其它权限参见SQL命令.
对象访问权限缺省授予对象所有者、系统管理员或系统安全员对于加密列的decrypt和加密密钥的select权限,并且可将对象访问权限授予其他用户.
如果有多个用户授予某个特定用户访问某对象的权限,则在所有授权用户撤消该访问权限之前,该用户的访问权限将一直予以保留.
如果系统管理员撤消了访问权限,则即使其他用户已授予此用户访问权限,此用户仍然无权访问.
使用grant命令授予对象访问权限.
请参见《参考手册:命令》.
可使用where子句授予能够根据where子句中的条件进行逐行访问限制的select、update和delete权限.
具体标识用户创建对象后,服务器会将所有者的数据库用户ID(uid)和创建者的登录名与sysobjects表中的该对象相关联.
这一信息将对象具体标识为属于此用户.
具体标识允许服务器在隐式授予对象权限时进行识别.
注意:在会话期间SAPASE通过登录名来标识用户.
此标识适用于服务器中的所有数据库.
如果用户创建了一个表,然后创建了一个访问该表的过程,则任何授予了执行此过程的权限的用户将不再需要直接访问此对象的权限.
例如,通过向用户"mary"授予proc1的权限,她虽然对于表table1没有显式select权限,但可以查看该表中的id和descr列:createtabletable1(idint,amountmoney,descrvarchar(100))createprocedureproc1asselectid,descrfromtable1grantexecuteonproc1tomary但是某些情况下,只有当对象被具体标识,隐式权限才有用.
其一是涉及别名和跨数据库对象访问的情况.
SQL92标准一致性的特殊要求如果已使用set命令来启用ansi_permissions,则update和delete语句还需要其它权限.
下面是用于update和delete的ANSI权限:第6章:管理用户权限136AdaptiveServerEnterprise所需权限:setansi_permissionsoff所需权限:setansi_permissionsonupdate针对要设置值的列的update权限针对要设置值的列的update权限与针对出现在where子句中的所有列的select权限set子句右侧所有列的select权限delete表的delete权限针对要删除行的表的delete权限与针对出现在where子句中的所有列的select权限如果ansi_permissions设置为打开状态,并试图在不具有其它select权限的情况下进行更新或删除,则会回退此事务,同时您将收到一条错误消息.
如果发生这种情况,对象所有者必须授予您所有相关列的select权限.
授予对象访问权限示例授予对象访问权限的示例.
以下语句授予Mary和"sales"组在titles表中执行插入和删除操作的权限:grantinsert,deleteontitlestomary,sales以下语句授予Harold使用存储过程makelist的权限:grantexecuteonmakelisttoharold以下语句将执行自定义存储过程sa_only_proc的权限授予具有系统管理员角色的用户:grantexecuteonsa_only_proctosa_role以下语句授予Aubrey在authors表中进行选择、更新和删除的权限,并授予其将相同权限授予其他用户的权限:grantselect,update,deleteonauthorstoaubreywithgrantoption本语句授予受薪员工更新十二月份薪水的权限:grantupdate(salary)onemployeewheredate_part(month,getdate())=12topayroll_role第6章:管理用户权限安全性管理137撤消对象访问权限示例撤消对象访问权限的示例.
以下两个语句都会撤消所有用户(表所有者除外)对titles表中price列和total_sales列的更新权限:revokeupdateontitles(price,total_sales)frompublic此语句会撤消Clare更新authors表的权限,如果她将此权限转授给其他用户,则此语句会同时撤消所有这些用户的该权限:revokeupdateonauthorsfromclarecascade以下语句会撤消操作员执行自定义存储过程new_sproc的权限:revokeexecuteonnew_sprocfromoper_role授予dbcc命令的权限系统管理员可以将执行dbcc命令的权限授予在AdaptiveServer中不具有系统管理员级特权的用户和角色.
这种自由选择访问控制使系统管理员能够控制对数据库对象或特定数据库级和服务器级操作的访问.
请参见《参考手册:命令》了解完整的dbcc语法.
服务器范围的和特定于数据库的dbcc命令dbcc命令是特定于数据库的或是服务器范围的命令.
特定于数据库的dbcc命令在特定目标数据库(例如,checkalloc、checktable、checkindex、checkstorage、checkdb、checkcatalog、checkverify、fix_text、indexalloc、reindex、tablealloc和textalloc)上执行.
尽管这些命令是特定于数据库的,但只有系统管理员才能够授予或撤消执行它们的权限.
服务器范围的dbcc命令(如tune)在整个服务器范围内有效,并且与任何特定数据库均无关联.
缺省情况下,这些命令会在整个服务器范围内进行授予,并且与任何数据库均无关联.
系统管理员可允许用户在所有数据库中执行dbcc命令,方法是使这些用户成为这些数据库中的有效用户.
但是,向角色授予执行grantdbcc命令的权限比向单独用户授予该权限更加方便,因为这样可以使用户以"guest"用户的身份使用数据库,而不需要手动将每个用户添加到数据库.
第6章:管理用户权限138AdaptiveServerEnterprise由于在数据库中第一次对角色执行grant时,角色即作为用户自动添加到数据库中,因此,当角色被授予dbcc特权时,不会再有其它要求.
登录名必须是在其中进行授权的数据库中的有效用户.
有效用户包括"guest".
对于服务器范围内的dbcc命令,登录名必须是master中的有效用户,并且系统管理员必须在master中授予权限.
对于特定于数据库的dbcc命令,登录名应是目标数据库中的有效用户.
从安全管理的角度来看,系统管理员可能更希望在服务器范围内授权执行特定于数据库的dbcc命令.
例如,可以针对名为storage_admin_role的用户定义角色在所有数据库上执行grantdbcccheckstorage,从而无需针对每个数据库中的storage_admin_role执行grantdbcccheckstorage.
以下命令在服务器范围内有效,而不是特定于数据库的命令:服务器范围的dbcc命令(如tune).
在服务器范围内授予的特定于数据库的dbcc命令,例如授予storage_admin_role的grantdbcccheckstorage.
系统表的权限如同任何其它表的权限一样,可以由数据库所有者来控制系统表的使用权限.
创建数据库之后,某些系统表的select权限将授予public,而某些系统表的select权限只有管理员才有.
对于其它表,部分列的select权限对public有限制.
若要确定特定系统表的当前权限,请执行:sp_helprotectsystem_table_name例如,要检查master数据库中的syssrvroles权限,请执行:usemastergosp_helprotectsyssrvrolesgo缺省情况下,所有用户(包括数据库所有者)均不可以直接修改系统表.
而应由SAPASE提供的T-SQL命令和系统过程来修改系统表.
此种作法有助于保证完整性.
警告!
虽然SAPASE提供了修改系统表的机制,SAP还是强烈建议您不要进行修改.
授予系统表和存储过程的缺省权限grant和revoke命令包含defaultpermissions参数.
installmodel或installmaster不会授予任何系统表的缺省权限(请参见下表).
相反,SAPASE在建立新的数据库时将分配系统表的缺省权限.
此命令的部分语法为:grantdefaultpermissionsonsystemtablesrevokedefaultpermissionsonsystemtables第6章:管理用户权限安全性管理139其中,defaultpermissionsonsystemtables指定当您从任何数据库发出此命令时,都可以授予或撤消以下系统表的缺省权限:sysalternatessysjarssysquerymatricssysthresholdssysattributessyskeyssysqueryplanssystypessyscolumnssyslogssysreferencessysusermessagessyscommentssysobjectssysrolessysuserssysconstraintssyspartitionkeyssyssegmentssysxtypessysdependssyspartitionssysslicessysgamssysproceduressysstatisticssysindexessysprotectssystabstats缺省权限对所有系统表上的public应用select,但以下情况例外:撤消public对syscolumns(encrkeyid)的select撤消public对syscolumns(encrkeydb)的select将对syscolumns的select授予sso_role撤消public的sysobjects(audflags)权限将sysobjects的权限授予sso_role撤消public对sysencryptkeys的所有列的select将对所有sysencryptkeys列的select授予sso_role如果从master数据库运行此命令,则会授予或撤消以下系统表的缺省权限:syscharsetssyslanguagessysmessagessysserverssysconfiguressyslistenerssysmonitorsyssessionssyscurconfigssyslockssysprocessessyssrvrolessysdatabasessysloginsysremoteloginssystimerangessysdevicessysloginrolesysresourceli-mitssystransactionssysenginessyslogsholdsyssecmechssysusages此命令还进行以下更改:撤消public对sysdatabases(audflags)的select撤消public对syscolumns(encrkeyid)的select撤消public对syscolumns(encrkeydb)的select第6章:管理用户权限140AdaptiveServerEnterprise将对syscolumns的select授予sso_role撤消public对sysdatabases(deftabaud)的select撤消public对sysdatabases(defvwaud)的select撤消public对sysdatabases(defpraud)的select撤消public对sysdatabases(audflags2)的select将sysdatabases的select授予sso_role.
撤消public对syslogins(password)的select撤消public对syslogins(audflags)的select将对syslogins的select授予sso_role撤消public对syslisteners(net_type)的select撤消public对syslisteners(address_info)的select将对syslisteners的select授予sso_role撤消public对syssrvroles(srid)的select撤消public对syssrvroles(name)的select撤消public对syssrvroles(password)的select撤消public对syssrvroles(pwdate)的select撤消public对syssrvroles(status)的select撤消public对syssrvroles(logincount)的select将对syssrvroles的select授予sso_role撤消public对sysloginroles(suid)的select撤消public对sysloginroles(srid)的select撤消public对sysloginroles(status)的select撤消sso_role对sysloginroles的select组合grant和revoke语句可将特定权限分配给特定用户,或者,如果要将大多数特权授予大多数用户,则可先将所有权限分配给所有用户,然后再撤消特定用户的特定权限,这样做更为简便.
例如,数据库所有者可以将titles表的所有权限授予所有用户,方法为发出:grantallontitlestopublic数据库所有者随后可以发出一系列revoke语句,例如:revokeupdateontitles(price,advance)frompublicrevokedeleteontitlesfrommary,sales,john第6章:管理用户权限安全性管理141grant和revoke语句区别先后顺序:发生冲突时,最近发出的语句将取代所有其它语句.
注意:在SQL规则下,必须先使用grant命令,然后再使用revoke命令,而不能在同一事务中使用这两个命令.
因此,如果先授予对某些对象的"public"访问权限,然后又撤消其中一个用户的访问权限,则在短暂时间内,此用户仍可以访问这些对象.
要防止这种情况发生,请使用createschema命令将grant和revoke子句并入同一事务中.
权限顺序和层次grant和revoke语句与其发出的先后次序有关.
例如,如果先为Jose所在的组授予对titles表的select权限,然后撤消Jose对advance列的select权限,则Jose可以选择除advance列之外的所有列,而组中的所有其他用户仍然可以选择所有列.
应用于某个组或某一角色的grant或revoke语句可更改已分配给该组中任何成员或角色的所有相互冲突的权限.
例如,如果titles表所有者已将不同权限授予sales组的各个成员,并希望进行标准化,则该所有者可以发出以下语句:revokeallontitlesfromsalesgrantselectontitles(title,title_id,type,pub_id)tosales同样,如果已向public发出grant或revoke语句,则所有用户以前发出的所有权限只要与新权限发生冲突,都会进行更改.
同一grant和revoke语句如果以不同的顺序发出,则会产生完全不同的情况.
例如,下面一组语句将导致public组中成员Jose对titles不具有任何select权限:grantselectontitles(title_id,title)tojoserevokeselectontitlesfrompublic相反,如果颠倒顺序发出同一组语句,结果只有Jose才具有对title_id和title列的select权限:revokeselectontitlesfrompublicgrantselectontitles(title_id,title)tojose如果在grant命令中使用关键字public,则也会将自己包括在内.
如果对对象创建权限执行revoke,则除非您是数据库所有者,否则public也会将您包括在内.
如果对对象访问权限执行revoke,则除非您是对象所有者,否则public也会将您包括在内.
您也许希望不具有自己所有的表的使用权限,而只具有基于此表的视图的访问权限.
为此,必须发出grant和revoke语句来显式设置您的权限.
可以使用grant语句重新设置此权限.
注意:如果启用了setfipsflagger选项,在发出grantdbcc和setproxy命令时,它们会发出以下警告:第6章:管理用户权限142AdaptiveServerEnterpriseSQLstatementonlinenumber1containsNon-ANSItext.
TheerroriscausedduetotheuseofDBCC.
获取另一用户的权限将提供两种方法来获取另一用户的标识和权限状态.
数据库所有者可以使用setuser命令来"模拟"当前数据库中另一用户的标识和权限状态.
代理授权允许一个用户在整个服务器范围内为使用另一用户的标识.
setuser命令"数据库所有者"使用setuser来采用其他用户的标识.
使用setuser进行以下操作:访问另一用户所属对象授予他人另一用户所属对象的权限创建将由另一用户拥有的对象由于某些其它原因,临时假定另一用户的DAC权限尽管setuser命令可使数据库所有者自动获得另一用户的DAC权限,但此命令不会影响已经授予的角色.
setuser权限缺省授予数据库所有者,并且不能移交.
被模拟的用户必须是数据库的授权用户.
SAPASE会检查被模拟用户的权限.
系统管理员可以使用setuser创建将由另一用户拥有的对象.
但是,系统管理员在DAC权限系统之外操作,因此,他们不需要使用setuser来获取另一用户的权限.
setuser命令将一直有效,直到发出另一setuser命令、当前数据库更改或用户退出登录时为止.
语法为:setuser["user_name"]其中,user_name是数据库中将要模拟的有效用户.
要恢复原标识,请在不为user_name赋值的情况下使用setuser.
此例将说明数据库所有者如何授予Joe读取Mary的authors表的权限:setuser"mary"grantselectonauthorstojoesetuser/*reestablishesoriginalidentity*/第6章:管理用户权限安全性管理143代理授权利用SAPASE的代理授权功能,系统安全员可以将另一用户的安全上下文的使用权限授予所选登录名,且应用程序可采用受控方式代表不同用户执行任务.
如果某个登录名具有代理授权的使用权限,此登录名就可以模拟SAPASE中的任何其它登录名.
警告!
使用另一用户标识的权限功能极强,应将其局限于受托的管理员和应用程序.
可以使用grantsetproxy.
.
.
restrictrole来限制用户在切换标识时无法获取的角色.
执行setproxy或setsessionauthorization的用户利用被模拟用户的登录名和服务器用户ID进行操作.
登录名存储在master.
.
syslogins的name列中,服务器用户ID存储在master.
.
syslogins的suid列中.
这些值在整个服务器上的所有数据库中都处于活动状态.
注意:setproxy和setsessionauthorization在功能上完全相同,可以互换使用.
唯一的区别是setsessionauthorization与ANSI-SQL92兼容,而setproxy是Transact-SQL扩展.
使用setproxy限制角色授予setproxy.
.
.
restrictrole来限制在切换标识时无法获取的角色.
setproxy的语法为:grantsetproxytouser|role[restrictrolerole_list|all|system]其中:role_list–限制目标登录名的角色列表.
被授予者必须具有此列表上的所有角色,否则setproxy命令将失败.
all–确保被授予者只能对与被授予者具有相同角色(或角色子集)的用户运行setproxy.
system–确保被授予者与目标登录名具有相同的系统角色集.
例如,将setproxy授予用户"joe",但限制他将标识切换为具有sa、sso或admin角色的任何用户(但是,如果他已经具有这些角色,则他可以对具有这些角色的任何用户执行setproxy):grantsetproxytojoerestrictrolesa_role,sso_role,admin_role如果"joe"尝试将其标识切换为某个具有admin_role的用户(在本示例中,为Our_admin_role)时,除非他已经具有admin_role,否则此命令将失败:setproxyOur_admin_roleMsg10368,Level14,State1:Server's',Line2:Setsessionauthorizationpermissiondeniedbecausethetargetloginhasarolethatyoudonothaveandyouhavebeenrestrictedfromusing.
第6章:管理用户权限144AdaptiveServerEnterprise授予"joe"admin_role并重试此命令后,此命令成功:grantroleadmin_roletojoesetproxyOur_admin_role有关setproxy命令的详细信息,请参见《参考手册:命令》.
执行代理授权执行setproxy或setsessionauthorization时,应遵循以下规则.
不得在事务内执行setproxy或setsessionauthorization.
不能为另一用户的代理使用锁定的登录.
例如,如果"joseph"是一个锁定的登录名,则不允许执行以下命令:setproxy"joseph"可以在任何允许使用的数据库中执行setproxy或setsessionauthorization.
但是,指定的login_name必须是数据库中的有效用户,或数据库必须具有为其定义的"guest"用户.
只允许一个级别;若要模拟多个用户,则在模拟操作之间必须返回到原标识.
如果在某个过程内执行setproxy或setsessionauthorization,则原标识会在退出此过程时自动恢复.
如果已授予某一登录名使用setproxy或setsessionauthorization的权限,则可以设置代理来模拟另一用户.
以下是语法,其中login_name是master.
.
syslogins中的有效登录名:setproxylogin_name或setsessionauthorizationlogin_name为登录名加上引号.
例如,若要将代理设置为"mary",请执行:setproxy"mary"设置代理后,检查服务器中的登录名和数据库中的用户名.
例如,假定登录名为"ralph",并具有setproxy授权权限.
现在打算以"sallyn"和"rudolph"身份在pubs2数据库中执行某些命令.
"sallyn"在此数据库中有一个有效的名称("sally"),而Ralph和Rudolph没有.
但是,pubs2已定义了一个"guest"用户.
则可以执行:setproxy"sallyn"gousepubs2goselectsuser_name(),user_name()gosallynsally若要更改为Rudolph,必须首先恢复自己的标识.
为此目的,请执行:第6章:管理用户权限安全性管理145setproxy"ralph"selectsuser_name(),user_name()goralphguest注意:Ralph是此数据库中的"guest".
然后执行:setproxy"rudolph"goselectsuser_name(),user_name()gorudolphguestRudolph也是此数据库中的guest,因为Rudolph不是此数据库中的有效用户.
现在,模拟"sa"帐号.
执行:setproxy"ralph"gosetproxy"sa"goselectsuser_name(),user_name()gosadbo应用程序的代理授权通过使用代理授权,应用程序服务器可以使用通用登录名登录到SAPASE服务器来为用户执行过程和命令.
下图显示了使用通用登录名"appl"登录到SAPASE服务器来为多个用户执行过程和命令的应用程序服务器.
一旦"appl"模拟Tom,应用程序就有Tom的权限.
同样,"appl"分别模拟Sue和John时,应用程序便分别有Sue和John的权限.
第6章:管理用户权限146AdaptiveServerEnterprise更改数据库对象所有权系统安全员或数据库所有者可以使用alter.
.
.
modifyowner命令来移交数据库对象的所有权.
此命令能让数据库管理员管理由于员工变动而带来的对象分配或分离数据库对象的创建所有权.
例如,密钥管理者可以创建一个加密密钥,然后将该加密密钥的所有权移交给另一个用户.
支持的对象类型对象的所有权可以从一个所有者移交给另一个所有者.
所有权可以显式更改的对象:用户表代理表视图存储过程用户定义的函数缺省值规则用户定义的数据类型加密密钥注意:未在下面列出的对象的所有权是无法更改的.
所有权无法显式更改的相关对象.
以下对象将在所有权和显式移交的对象相同时被移交:触发器如果DBO拥有的触发器是针对非DBO拥有的表/视图创建的,则该触发器的所有权是无法改变的.
在创建表/视图的过程中定义的声明性对象缺省值解密缺省值检查约束引用约束分区条件计算列第6章:管理用户权限安全性管理147移交所有权的授权系统安全员有权移交所有支持所有权移交的对象的所有权.
数据库所有者有权移交加密密钥以外的对象的所有权.
数据库所有者可以移交所有权,但有以下限制:数据库对象所有者无法移交由数据库所有者具体拥有的对象的所有权.
如果对象将数据库所有者的用户ID用作sysobjects.
uid,并将空值或数据库所有者的用户名用作sysobjects.
loginame,则该对象会被标识为由数据库所有者具体拥有.
别名为数据库所有者的用户不能移交由数据库所有者创建或由该用户具体拥有的对象的所有权.
数据库所有者创建的对象在sysobjects.
loginame中具有空值.
由某个用户具体拥有的对象在sysobjects.
loginame中使用该用户的用户名.
使用sp_helpuser可搜索并列出对象和相应的所有者.
移交所有权所有权移交可以是特定于单个对象的,也可以在一个命令中移交多个对象.
使用preservepermissions可保留对象的显式授予权限.
有关语法,请参见《参考手册:命令》中的"alter.
.
.
modifyowner".
在下面的示例中,数据库所有者将john拥有的表移交给eric.
altertablejohn.
table_auditmodifyownereric若要将john拥有的所有表都移交给eric,系统安全员可以执行:altertablejohn.
*modifyownereric若要将john拥有的所有对象都移交给eric,系统安全员可以执行:alteralljohn.
*modifyownereric移交系统数据库中的对象所有权更改系统数据库中由SAP提供的对象的所有权.
更改以下由SAP提供并管理的系统数据库中的对象的所有权时应慎重:sybsecuritysybsystemdbmodelsybsystemprocssybsyntaxdbccdbtempdb不要更改由SAP提供并管理的系统对象的所有权:第6章:管理用户权限148AdaptiveServerEnterprise带有spt_前缀的用户表带有sp_前缀的系统存储过程更改这些对象的所有权可能会使系统不可用.
移交数据库所有者对象的所有权非系统对象的数据库所有者可以使用参数dbo.
object_name移交所有权.
不能使用*移交多个对象的所有权.
preservepermissions命令指定preservepermissions可保留对象的所有显式授予或撤消的权限.
例如,bill向mark授予了对表bill_table的select权限.
然后,mark将对表bill_table的select权限授予了john.
如果随后通过指定的preservepermissions将该表的所有权转交给eric,则mark和john仍将具有对bill_table的权限.
在下面的示例中,系统安全员将视图bill.
vw_author的所有权移交给eric,同时保留所有现有的显式授予权限:alterviewbill.
vw_author_in_camodifyownerericpreservepermissions当指定preservepermissions时,不会保留隐式权限.
例如,bill拥有具有加密列的表bill.
encr_table,而且restricteddecryptpermission配置选项设置为1.
如果系统安全员向bill显式授予对bill.
encr_table的decrypt权限,bill将会拥有通过自己的所有权获得的权限alter、delete、insert、references、select和update.
而且他还拥有通过系统安全员的显式授予获得的decrypt权限.
系统安全员通过preservepermissions将bill.
encr_table的所有权移交给eric后,bill将失去对该表的所有权限,但decrypt权限除外.
如果不指定preservepermissions,则在所有权移交后,以前的所有者将失去通过所有权隐式获得的有关该对象的权限.
通过给予对象的所有权,新的所有者将隐式获得权限.
注意:对于无法通过所有权获得的权限,如decrypt权限,系统安全员或数据库所有者必须再次向新的所有者显式授予这些对象的权限.
安全问题系统安全员或数据库所有者应该注意可能发生的安全问题.
例如,alice是Accounting数据库的用户,但无权访问payroll数据.
她可以创建用来从Accounting.
dbo.
payroll中选择姓名和工资的过程alicep,然后将alicep的execute权限授予public.
如果系统安全员意外地将alicep的所有权更改为bill(一个具有特权的用户,可通过preservepermissions选项访问payroll数据),则所有用户都可以通过执行恶意过程alicep访问payroll信息,因为所有权限都设置为在所有权更改后保留.
第6章:管理用户权限安全性管理149为避免非授权使用,系统安全员或数据库所有者可以使用sp_helprotect来检查某个对象的现有权限.
移交加密密钥的所有权系统安全员和密钥所有者可以使用alterencryptionkey或alter.
.
.
modifyowner移交加密密钥.
有关alterencryptionkey命令的信息,请参见《参考手册:命令》.
加密密钥副本所有者使用alter.
.
.
modifyowner命令时,已被授予了密钥副本的用户不能是加密密钥的新所有者.
加密密钥的所有者发生更改后,密钥副本的被分配者不会更改.
例如,用户bill拥有名为bill.
encrkey的加密密钥,并创建该密钥的一个密钥副本,将其分配给mark.
在bill将bill.
encrkey的所有权移交给eric后,mark仍拥有bill.
encrkey的副本.
权限报告使用系统过程和系统表报告有关代理、对象创建和对象访问权限的信息.
报告信息使用代理系统表用户和进程sp_who数据库对象或用户的权限sp_helprotect特定表的权限sp_helprotect查询代理授权的sysprotects表要显示有关已授予(或已撤消)用户、组和角色的权限的信息,请查询sysprotects表.
action列指定权限.
例如,setproxy或setsessionauthorization的action值为167.
执行此查询时:select*fromsysprotectswhereaction=167查询结果提供授予或撤消该权限的用户的用户ID(grantor列)、具有权限的用户的用户ID(uid列)和保护类型(protecttype列).
protecttype列可包含以下值:0表示grantwithgrant第6章:管理用户权限150AdaptiveServerEnterprise1表示grant2表示revoke有关sysprotects表的详细信息,请参见《参考手册:构件块》.
显示有关用户和进程的信息sp_who可以显示有关当前所有SAPASE用户和进程的信息,也可以显示有关特定用户或进程的信息.
sp_who的结果包括loginame和origname.
如果用户正在代理下进行操作,则origname将包含原始登录的名称.
例如,假设"ralph"执行以下命令,然后执行一些SQL命令:setproxysusiesp_who将为loginame返回"susie",并为origname返回"ralph".
sp_who查询master.
.
sysprocesses系统表,该表包含服务器用户ID列(suid)和原始服务器用户ID列(origsuid).
有关详细信息,请参见《参考手册:过程》中的"sp_who".
报告数据库对象或用户的权限使用sp_helprotect可以按数据库对象或者按用户来报告权限,还可以(可选地)按指定对象的用户进行报告.
任何用户都可以执行此过程.
例如,假设您发出下面一系列grant和revoke语句:grantselectontitlestojudygrantupdateontitlestojudyrevokeupdateontitles(contract)fromjudygrantselectonpublisherstojudywithgrantoption要确定Judy现在对titles表中各列的权限,请输入:sp_helprotecttitles,judygrantorgranteetypeactionobjectcolumnpredicategrantable------dbojudyGrantSelecttitlesAllNULLFALSEdbojudyGrantUpdatetitlesadvanceNULLFALSEdbojudyGrantUpdatetitlesnotesNULLFALSEdbojudyGrantUpdatetitlespriceNULLFALSEdbojudyGrantUpdatetitlespub_idNULLFALSEdbojudyGrantUpdatetitlespubdateNULLFALSEdbojudyGrantUpdatetitlestitleNULLFALSEdbojudyGrantUpdatetitlestitle_idNULLFALSEdbojudyGrantUpdatetitlestotal_salesNULLFALSEdbojudyGrantUpdatetitlestypeNULLFALSE第6章:管理用户权限安全性管理151第一行显示数据库所有者("dbo")授予Judy选择titles表中所有列的权限.
其余各行指示她只能更新显示中出现的列.
Judy不能将select或update权限授予任何其他用户.
若要查看Judy对publishers表的权限,请输入:sp_helprotectpublishers,judy在下面的显示中,grantable列显示为TRUE,表示Judy可以将权限授予其他用户.
grantorgranteetypeactionobjectcolumnpredicategrantabledbojudyGrantSelectpublishersallNULLTRUE有关语法,请参见《参考手册:过程》.
报告特定表的权限使用sp_helprotect可返回有关指定表的权限信息.
要查看对sales表的权限,请输入:sp_tablessalesgrantorgranteetypeactionobjectcolumnpredicategrantable-dboguestGrantDeletesalesAllNULLFALSEdboguestGrantDeleteStatisticssalesAllNULLFALSEdboguestGrantInsertsalesAllNULLFALSEdboguestGrantReferencessalesAllNULLFALSEdboguestGrantTransferTablesalesAllNULLFALSEdboguestGrantTransferTablesalesAllNULLFALSEdboguestGrantUpdatesalesAllNULLFALSEdboguestGrantUpdateStatisticssalesAllNULLFALSEdbopublicGrantSelectsalesAllNULLFALSE(1rowaffected)(returnstatus=0)有关sp_helprotect的输出的详细信息,请参见《参考手册:过程》.
第6章:管理用户权限152AdaptiveServerEnterprise视图和存储过程作为安全性机制视图和存储过程可以充当安全性机制.
可以通过视图或存储过程授予用户对数据库对象受控制的访问权限,而不授予他们对数据的直接访问权限.
例如,可授予操作人员对用来更新projects表中开销信息的过程的execute权限,而不让该用户查看此表中的机密数据.
若要使用此功能,必须拥有此过程或视图及其基础对象.
如果没有基础对象,用户必须具有对象访问权限.
有关何时需要权限的详细信息,请参见.
SAPASE在用户使用视图或过程时会根据需要进行权限检查.
创建视图或过程时,SAPASE不对基础对象进行权限检查.
使用视图作为安全性机制使用视图时,用户只能查询和修改所看到的数据.
数据库的其余部分既不可见也不可访问.
无论对视图基础表的权限如何,必须显式授予或撤消访问视图的权限.
如果视图和基础表归同一用户所有,则不需授予基础表权限.
授权访问视图而非基础表的用户无法看到视图中没有的基础表数据.
通过定义不同的视图并有选择地授予它们的权限,可以限制用户或任意用户组合对不同数据子集的访问.
访问权限可以限制到:基表中行的子集(与值相关的子集).
例如,可以定义只包含商业与心理学书籍的行的视图,使某些用户无法看到其它类型书籍的信息.
基表中列的子集(与值不相关的子集).
例如,可以定义包含titles表中所有行但不包含price列与advance列的视图,因为这些信息是敏感的.
基表的行列子集.
能连接多个基表的行.
例如,可以定义一个连接titles、authors和titleauthor表的视图.
此视图隐藏了作者的个人信息以及图书的价格信息.
基表中数据的统计信息.
例如,可以只定义包含各类书籍平均价格的视图.
另一视图子集或视图和基表的某种组合的子集.
如果要阻止某些用户访问titles表中显示销售额和销售量的列,可以创建一个不包括这些列的titles表视图,然后将此视图的权限授予所有用户,而只将此表的访问权限授予销售部门:grantallonbookviewtopublicgrantallontitlestosales不使用视图也可以设置上述这些特权条件,方法是使用下列语句:grantallontitlestopublicrevokeselect,updateontitles(price,advance,total_sales)frompublic第6章:管理用户权限安全性管理153grantselect,updateontitles(price,advance,total_sales)tosales第二种方法可能遇到的一个问题是,如果sales组以外的用户输入了select*fromtitles命令,该用户可能会意外地看到包含以下短语的消息:permissiondeniedSAPASE将星号扩展到titles表所有列的列表中,且由于已撤消非销售部门用户对其中某些列的权限,所以会拒绝对这些列的访问.
错误消息列出了用户无权访问的所有列.
若要查看用户有权访问的所有列,非销售部门的用户必须要对它们进行显式指定.
因此,较好的解决方法是创建视图并授予相应权限.
视图也可用于上下文相关的保护.
例如,可以创建一个视图,仅授予数据录入员访问自己添加或更新的那些行的权限.
要完成上述操作,必须在表中添加一列.
用户每输入一行在此列中就自动缺省记录此用户的ID.
可以在createtable语句中定义此缺省值,如下所示:createtabletesttable(empidint,startdatedatetime,usernamevarchar(30)defaultuser)然后,定义一个包括表中所有行的视图.
其中uid是当前用户:createviewcontext_viewasselect*fromtesttablewhereusername=user_name()withcheckoption可通过此视图检索的行由针对此视图发出select命令的用户的标识所决定.
通过在视图定义中添加withcheckoption,可以防止数据录入员在username列中伪造信息.
另请参见了解所有权链(第155页)使用存储过程作为安全机制如果存储过程及所有基础对象归同一用户所有,那么该所有者可授予其他用户使用存储过程的权限,而不用授予对基础对象的权限.
例如,即使某个用户对用于更新指定表中行列子集的存储过程不具备任何权限,也可以授予该用户执行该存储过程的权限.
可使用executeasowner或executeascaller创建一个过程,此过程可分别代表所有者或调用者检查运行时权限、执行DDL以及解析对象名.
第6章:管理用户权限154AdaptiveServerEnterprise使用executeasowner、executeascaller,或未使用executeas子句定义的过程可以嵌套在用executeasowner或executeascaller定义的过程内.
同样,使用executeasowner或executeascaller定义的过程可以嵌套在未使用executeas子句定义的过程内.
不允许将setsessionauthorization语句嵌套在用executeasowner定义的过程内,即使该语句位于未定义为executeasowner的嵌套过程内也是如此.
有关语法,请参见《参考手册:命令》中的"createprocedure".
角色和存储过程使用grantexecute命令可授予所有被授予指定角色的用户对存储过程的execute权限.
可使用revokeexecute撤消该权限.
但是,grantexecute权限不会阻止为没有指定角色的用户授予存储过程的execute权限.
为进一步增加安全性,可通过在存储过程中使用has_role系统函数来确保某一过程只能由具有给定角色的用户执行,从而对此过程的使用加以限制.
如果用户具有特定角色(sa_role、sso_role、oper_role或任何用户定义角色),则has_role返回1,如果用户不具有该角色,则返回0.
例如,下面是一个使用has_role查看用户是否具有系统管理员角色的过程:createproctest_procasif(has_role("sa_role")=0)beginprint"Youdon'thavetherightrole"return-1endelseprint"YouhaveSArole"return0有关has_role的详细信息,请参见《参考手册:构件块》中的"系统函数".
了解所有权链视图可依据其它视图或表而形成.
过程可依据其它过程、视图或表而形成.
这种依赖性可以看作是所有权链.
通常,视图所有者还拥有此视图的基础对象(其它视图和表),存储过程所有者拥有此过程引用的所有过程、表和视图.
同存储过程及其引用的所有对象一样,视图及其基础对象常常在同一数据库中;但并不要求必须在同一数据库中.
如果对象在不同的数据库中,则要使用视图或存储过程的用户必须是包含这些对象的所有数据库的有效用户或guest用户.
这样,除非数据库所有者已授权,否则用户无法访问数据库.
如果发生以下情况,在被授予某一过程或视图的execute权限的用户使用此视图或过程时,SAPASE将不检查任何基础对象的权限:第6章:管理用户权限安全性管理155这些对象和视图或过程由同一用户拥有,并且访问视图或过程的用户在每个包含基础对象的数据库中都是有效用户或guest用户.
但是,如果并非所有对象都由同一用户拥有,则SAPASE将在所有权链断开时检查对象权限.
也就是说,如果对象A引用对象B,而对象B不是由拥有对象A的用户拥有,则SAPASE会检查对象B的权限.
使用这种方法,SAPASE允许原始数据所有者对有权访问此数据的用户进行控制.
通常,创建视图的用户只需关注此视图的授权问题.
例如,假设Mary已在其拥有的authors表中创建了名为auview1的视图.
如果Mary将auview1的select权限授予Sue,则SAPASE将允许Sue访问它,而不检查Sue对authors的权限.
但是,如果某个用户依据归另一用户所有的对象创建视图或存储过程,则该用户必须知道自己所授予的任何权限都取决于这些对象所有者允许的权限.
视图和所有权链的示例所有权链和权限检查的示例.
举一个所有权链的示例,Joe依据Mary的视图auview1创建了名为auview2的视图.
然后,Joe授予Sue对auview2的select权限.
所有权链如下图所示:SAPASE检查auview2和auview1的权限,发现Sue可以使用它们.
SAPASE检查auview1和authors的所有权,发现它们的所有者相同.
因此,Sue可以使用auview2.
在此示例的基础上进一步继续,假设Joe的视图auview2依据auview1而创建,而后者又依据authors而创建.
Mary认为自己喜欢Joe的auview2,因此以其为基础创建了auview3.
这样,auview1和authors的所有者都为Mary.
所有权链如下图所示:第6章:管理用户权限156AdaptiveServerEnterprise当Sue试图访问auview3时,SAPASE检查auview3、auview2和auview1的权限.
如果Joe已授予Sueauview2的权限,Mary也已授予她auview3和auview1的权限,则SAPASE将允许进行访问.
SAPASE仅在此链中某对象的前一个对象具有不同所有者时(或者,如果对象是此链中第一个对象时)才检查权限.
例如,它检查auview2,因为此视图的前一个对象auview3由不同的用户拥有.
它不检查authors的权限,因为直接依赖于此视图的对象auview1由同一用户拥有.
过程和所有权链的示例存储过程的所有权链和权限检查示例.
过程遵循的规则与视图相同.
例如,假设所有权链如下所示:要执行proc4,Sue必须具有执行proc4、proc2和proc1的权限.
而执行proc3的权限不是必需的,因为proc3和proc4的所有者相同.
Sue每次执行proc4时,SAPASE都要检查她对proc4及其引用的所有对象的权限.
SAPASE知道要检查哪些引用对象:在Sue首次执行proc4时,它就已经确定了要第6章:管理用户权限安全性管理157检查的引用对象,并将此信息同过程执行计划一同保存.
除非此过程引用的对象中有一个对象被删除或重新定义,否则,SAPASE不会更改初始确定的检查对象内容.
使用此保护层次,每个对象所有者可以完全控制对对象的访问.
所有者可以控制对视图、存储过程和表的访问.
触发器的权限触发器是一种特殊的存储过程,用于强制实现完整性,尤其是参考完整性.
触发器从来都不能直接执行,而只能作为修改表的副作用.
无法授予或撤消触发器的权限.
只有对象所有者才能创建触发器.
但是,如果表中的触发器引用不同用户拥有的对象,则可能中断所有权链.
适用于过程的保护层次规则也适用于触发器.
虽然受触发器影响的对象通常归拥有此触发器的用户所有,但也可以编写一个触发器,用来修改归另一用户所有的对象.
这种情况下,任何以激活此触发器的方法修改对象的用户都必须具有另一对象的权限.
如果SAPASE由于触发器影响用户对其没有权限的对象而拒绝授予对数据修改命令的权限,则整个数据修改事务会回滚.
请参见《Transact-SQL用户指南》中的"触发器:强制实施参照完整性".
使用executeasowner或executeascaller执行过程可使用executeasowner或executeascaller创建一个过程,此过程可分别代表所有者或调用者检查运行时权限、执行DDL以及解析对象名.
如果使用executeascaller创建过程,SAPASE会以过程调用者的身份执行这些操作.
如果使用executeasowner创建过程,则以过程所有者的身份执行这些操作.
当省略executeas子句时,该行为与低于SAPASE15.
7ESD#2的版本行为相同.
对于需要对照过程所有者特权对过程中所有操作进行检查的应用程序而言,创建以过程所有者身份执行的过程十分有用.
因所有权链引起的隐式授予检查不适用于用executeasowner创建的过程.
除了对存储过程的execute权限外,应用程序最终用户不需要数据库中的任何特权.
此外,该过程所执行的任何DDL以过程所有者身份进行,在该过程中创建的任何对象为过程所有者所拥有.
这样一来,管理员就不必授予应用程序用户对DDL命令的特权.
如果必须以单个用户的身份检查权限,则有必要创建作为会话用户或调用者执行的过程.
例如,如果过程访问的表实施通过谓词特权进行的精细访问控制,则使用executeascaller,以便允许一个用户查看一部分行,另一个用户查看另一部分行.
因所有权链引起的隐式授予检查不适用于用executeascaller创建的过程;如果该过程引用的表中存在谓词特权,他们将适用.
如果省略executeas子句:以过程所有者身份解析对象名.
第6章:管理用户权限158AdaptiveServerEnterprise以过程调用者身份执行DDL命令和跨数据库访问.
除非引用的对象与过程之间存在所有权链,这种情况下将绕过权限检查,否则将以调用者身份进行DML、execute、transfertable、truncatetable、deletestatistics和updatestatistics的权限检查.
如果指定了executeasowner子句,在执行一开始,该过程的行为与对所有者执行隐式setsessionauthorization后的预期行为一致.
该行为包括:以过程所有者身份解析对象名.
如果该过程未使用所有者名称限定名称而直接引用表或其它对象,SAPASE将查找属于该过程所有者的具有该名称的表.
如果不存在这样的表,SAPASE将查找数据库所有者拥有的具有该名称的表.
以过程所有者身份执行DDL命令和跨数据库访问.
不通过所有权链进行隐式授权.
所有访问控制检查均基于过程所有者的权限、所在组、系统角色、缺省用户定义角色以及授予所有者的且在过程体中激活的角色.
同样考虑授予所有者登录配置文件的角色.
仅考虑过程执行期间过程所有者激活的角色.
使用executeasowner、executeascaller,或未使用executeas子句定义的过程,可嵌套在用executeasowner定义的过程内.
同样,使用executeasowner定义的过程可嵌套在未使用executeas子句定义的过程内.
除非嵌套的过程定义为executeasowner,否则以调用过程所有者身份执行从executeasowner过程调用的过程.
无论sp_procxmode的"DynamicOwnershipChain"设置如何,均使用过程所有者的权限执行过程内部的动态SQL语句.
由于临时表为会话所有,因此调用者在过程外部创建的临时表在过程内可供过程所有者使用.
在会话中执行setsessionauthorization命令后,该行为会反映临时表的可用性.
过程内执行的语句的审计记录显示了过程所有者的名称和executeasowner选项.
不允许将setsessionauthorization语句嵌套在用executeasowner定义的过程内,即使该语句位于未定义为executeasowner的嵌套过程内也是如此.
如果指定executeascaller子句,以调用者身份解析对象.
如果该过程未使用所有者名称限定名称而直接引用表或其它对象,SAPASE将查找属于该过程调用者的具有该名称的表.
如果不存在这样的表,SAPASE将查找数据库所有者拥有的具有该名称的表.
以调用者身份执行DDL命令和跨数据库访问.
不通过所有权链进行隐式授权.
以调用者、调用者所在组、活动角色和系统角色的身份检查权限.
使用executeasowner、executeascaller,或未使用executeas子句定义的过程,可嵌套在用executeascaller定义的过程内.
同样,使用executeascaller定义的过程可嵌套在未使用executeas子句定义的过程内.
除非嵌套的过程定义为executeasowner,否则以父过程调用者的身份执行从executeascaller过程调用的过程.
第6章:管理用户权限安全性管理159无论sp_procxmode的"DynamicOwnershipChain"设置如何,都将以调用者身份执行动态SQL.
过程外部创建的临时表在过程内部可用.
过程的对象引用不输入到sysdepends里,因为对象是根据过程的每个调用者解析的.
select*不在syscomments内扩展.
同一过程的过程高速缓存中的计划不在用户之间共享,因为过程中的对象必须解析为执行该过程的用户.
因此,如果多位用户执行该过程,可能会增加过程高速缓存率.
当用户再次执行该过程时,将重用特定用户的计划.
过程内执行的语句的审计记录显示了过程调用者名称和executeascaller子句.
在以下示例中,用户Jane创建的过程没有executeas子句.
该过程从jane.
employee中选择内容并插入到名为emp_interim的中间表中:createprocedurep_empselect*intoemp_interimfromjane.
employeegrantexecuteonp_emptobillBill执行该过程:execjane.
p_empBill不必具有对jane.
employee的select权限,因为Jane拥有p_emp和employee.
通过授予Bill对p_emp的execute权限,Jane已隐式授予其对employee的select权限.
Bill必须已被授予createtable权限.
emp_interim表将归Bill所有.
在以下示例中,Jane用executeasowner子句创建带有相同体的过程,并且Bill执行该过程:createprocedurep_empwithexecuteasownerasselect*intoemp_interimfromjane.
employeegrantexecuteonp_emptobillBill只需具有execute权限即可成功运行该过程.
emp_interim表是以Jane的身份创建的,意味着Jane是所有者.
如果Jane没有createtable权限,该过程将失败.
在以下示例中,Jane用executeascaller子句创建了同样的过程:createprocedurep_empwithexecuteascalleras第6章:管理用户权限160AdaptiveServerEnterpriseselect*intoemp_interimfromjane.
employeegrantexecuteonp_emptobillBill必须具有对jane.
employee的select权限.
尽管jane同时拥有p_emp和employee,也不会进行任何隐式授予检查.
如果jane.
employee向Bill授予了谓词特权,则会将谓词添加到查询中.
Bill必须具有createtable权限.
emp_interim是以Bill的身份创建的,意味着Bill是所有者.
创建引用对象未限定名称的过程不使用executeas子句而使用executeasowner或executeascaller子句进行过程创建的示例.
在以下示例中,过程没有executeas子句:createprocedureinsertpinsertt1(c1)values(100)grantexecuteoninsertptobillBill执行该过程:execjane.
insertpSAPASE将执行搜索以查找归Jane所有的名为t1的表.
如果jane.
t1不存在,SAPASE将执行搜索以查找dbo.
t1.
如果t1解析成dbo.
t1,Bill必须具有对t1的insert权限.
如果t1解析成jane.
t1,由于jane.
insert_p和jane.
t1之间存在所有权链,Bill将具有隐式insert权限.
在以下示例中,Jane用executeasowner创建了同上的过程:createprocedureinsertpwithexecuteasownerasinsertt1(c1)values(100)grantexecuteoninsertptobillBill执行该过程:execjane.
insertpSAPASE将执行搜索以查找归Jane所有的名为t1的表.
如果jane.
t1不存在,SAPASE将执行搜索以查找dbo.
t1.
如果t1解析成dbo.
t1,则必须为Jane授予向t1插入内容的权限.
如果t1解析成jane.
t1,由于该过程是以所有者的身份执行的,Jane具有权限.
第6章:管理用户权限安全性管理161在以下示例中,Jane用executeascaller创建了同上的过程:createprocedureinsertpwithexecuteascallerasinsertt1(c1)values(100)grantexecuteoninsertptobillBill执行该过程:execjane.
insertpSAPASE将执行搜索以查找归Bill所有的名为t1的表.
如果bill.
t1不存在,SAPASE将执行搜索以查找dbo.
t1.
如果t1解析成dbo.
t1,则Bill必须具有向t1插入内容的权限.
在其它具有完全限定名的数据库里调用嵌套过程的过程使用executeasowner和executeascaller进行嵌套过程创建的示例.
在以下示例中,Jane创建了在其它具有完全限定名的数据库里调用嵌套过程的过程.
与Jane关联的登录名在otherdb中解析成用户Jane.
下面的示例使用executeasowner:createprocedurepmasterwithexecuteasownerasexecotherdb.
jim.
p_childgrantexecuteonpmastertobillBill执行该过程:SAPASE检查otherdb中的用户Jane对jim.
p_child是否具有execute权限.
如果未使用executeas子句创建jim.
p_child,则会以Jane的身份执行p_child.
如果使用executeasowner子句创建jim.
p_child,则会以Jim的身份执行p_child.
如果使用executeascaller创建jim.
p_child,则会以Jane的身份执行p_child.
在以下示例中,Jane用executeascaller创建了同上的过程.
与当前数据库中用户Bill关联的登录名在otherdb中解析成用户Bill:createprocedurepmasterwithexecuteascallerasexecotherdb.
jim.
p_childgrantexecutepmastertobill第6章:管理用户权限162AdaptiveServerEnterpriseBill执行该过程:execjane.
p_masterSAPASE检查otherdb中的Bill对jim.
p_child是否具有execute权限.
如果未使用executeas子句创建jim.
p_child,将以Bill的身份执行p_child.
如果使用executeasowner子句创建jim.
p_child,则会以Jim的身份执行p_child.
如果使用executeascaller创建jim.
p_child,则会以Bill的身份执行p_child.
行级访问控制利用行级访问控制,数据库所有者或表所有者能够自动创建安全数据访问环境.
行级访问控制提供以下功能:更加细化的数据安全性:可针对个别的行设置权限,而不仅仅针对表和列根据组、角色和应用程序进行的自动数据过滤服务器中编码的数据级安全性行级访问控制通过三项功能限制对表的个别行中数据的访问:数据库所有者定义并绑定到表的访问规则应用程序上下文功能,可提供用于定义、存储和检索用户定义上下文的内置函数数据库所有者、sa_role或用户可以创建的登录触发器SAPASE强制所有数据操作语言(DML)实施行级访问控制,从而防止用户绕过访问控制来获取数据.
配置系统实施行级访问控制的语法如下:sp_configure"enablerowlevelaccess",1此选项会稍微增加使用的内存量,并且需要ASE_RLAC许可证选项.
行级访问控制是一个动态选项,因此不需要重新启动服务器.
还可通过在grant语句中使用where子句来授予行级访问.
如果隐私策略取决于其它表中的数据或通过子查询执行的完整SQL表达式,则使用此行级访问控制方法.
访问规则若要使用行级访问控制功能,请将access选项添加到现有的createrule语法中.
访问规则将对任何可被查看或修改的行施加限制.
访问规则类似于域规则,域规则允许表所有者控制用户可以在某个列中插入或更新的值.
域规则对添加的数据施加限制,对update和insert命令起作用.
访问规则对检索的数据施加限制,对select,update和delete操作强制执行.
SAPASE将对查询所读取的所有列强制执行访问规则,即使select列表中不包括这些列.
也就第6章:管理用户权限安全性管理163是说,在给定的查询中,SAPASE将对更新的表强制执行域规则,并对所读取的所有表强制执行访问规则.
例如:insertintoorders_tableselect*fromold_orders_table在此查询中,如果orders_table上有域规则,old_orders_table上有访问规则,则SAPASE将对orders_table强制执行域规则(原因是更新了该表),而对old_orders_table强制执行访问规则(原因是读取了该表).
使用访问规则类似于使用视图或使用带where子句的即席查询.
查询是在附加访问规则之后才进行编译和优化的,因此它不会导致性能下降.
访问规则提供表数据的虚拟视图,视图的内容取决于绑定到列的具体访问规则.
访问规则可以绑定到用sp_addtype定义的用户定义数据类型.
SAPASE在用户表上强制执行访问规则,这样,表所有者或数据库所有者在标准化方案中就无需执行将访问规则绑定到列的维护任务.
例如,您可以创建一个名为username的用户定义类型,其基本类型为varchar(30),并为该类型绑定一个访问规则.
SAPASE将对应用程序中具有username类型的列的所有表强制执行访问规则.
访问规则的语法在createrule语法中使用access参数创建访问规则.
create[or|and]accessrule(access_rule_name)as(condition)创建带有访问规则的示例表可以创建表并将访问规则绑定到该表.
创建表表所有者创建并填充表T(usernamechar(30)、titlechar(30)、classified_datachar(1024)):AA,"AdministrativeAssistant","MemotoPresident"AA,"AdministrativeAssistant","TrackingStockMovements"VP1,"VicePresident","MeetingSchedule"VP2,"VicePresident","MeetingSchedule"创建并绑定访问规则表所有者创建访问规则uname_acc_rule并将其绑定到表T上的username列.
createaccessruleuname_acc_ruleas@username=suser_name()sp_bindruleuname_acc_rule,"T.
username"第6章:管理用户权限164AdaptiveServerEnterprise查询表发出以下查询后:select*fromTSAPASE处理绑定到表T上username列的访问规则并将其附加到查询树.
然后优化查询树,并生成和执行执行计划,就好像用户执行了带访问规则中给出的过滤器子句的查询一样.
也就是说,SAPASE按如下示例附加访问规则并执行查询:select*fromTwhereT.
username=suser_name().
服务器强制执行条件whereT.
username=suser_name().
用户不能绕过访问规则.
管理助手执行选择查询的结果是:AA,"AdministrativeAssistant","MemotoPresident"AA,"AdministrativeAssistant","TrackingStockMovements"删除访问规则在删除访问规则之前,必须使用sp_unbindrule取消它与任何列或数据类型的绑定,如下面的示例所示:sp_unbindrule"T.
username",NULL,"all"sp_unbindrule可取消绑定在缺省情况下附加到列上的任何域规则.
在取消绑定规则之后,可以将其删除:droprule"rule_name"例如:droprule"T.
username"扩展访问规则的语法每个访问规则绑定到一个列,但一个表中可以具有多个访问规则.
createrule提供AND和OR参数来处理多个访问规则的计算.
要创建AND访问规则和OR访问规则,请使用扩展访问规则语法:AND访问规则:createandaccessrulerule_nameOR访问规则:createoraccessrulerule_nameas可以将AND访问规则和OR访问规则绑定到列或用户定义数据类型.
虽然每个列只能绑定一个访问规则,但通过扩展访问规则语法,可以在表中绑定多个访问规则.
当访问表时,这些访问规则就会生效,缺省情况下,先执行绑定的AND规则,然后执行OR访问规则.
如果在表中绑定多个访问规则但没有定义AND或OR访问,则缺省访问规则是AND.
第6章:管理用户权限安全性管理165如果表中某行上只有一个访问规则,并且这一规则被定义为OR访问规则,则它与AND访问规则的行为相同.
访问和扩展访问规则示例进行访问规则创建的示例.
创建访问规则以下步骤创建访问规则:createaccessruleempid1_accessas@empid=1createaccessruledeptno1_accessas@deptid=2以下步骤创建OR访问规则:createoraccessrulename1_accessas@name="smith"createoraccessrulephone_accessas@phone="9999"创建表下面的步骤创建一个测试表:createtabletesttab1(empnoint,deptnoint,namechar(10),phonechar(4))将规则绑定到表以下步骤将访问规则绑定到测试表中的列:sp_bindruleempid1_access,"testtab1.
empno"/*Ruleboundtotablecolumn.
*/(returnstatus=0)sp_bindruledeptno1_access,"testtab1.
deptno"/*Ruleboundtotablecolumn.
*/(returnstatus=0)sp_bindrulename1_access,"testtab1.
name"/*Ruleboundtotablecolumn.
*/(returnstatus=0)sp_bindrulephone_access,"testtab1.
phone"/*Ruleboundtotablecolumn.
*/(returnstatus=0)将数据插入表中以下步骤将值插入测试表中:inserttesttab1values(1,1,"smith","3245")(1rowaffected)inserttesttab1values(2,1,"jones","0283")(1rowaffected)inserttesttab1values(1,2,"smith","8282")(1rowaffected)inserttesttab1values(2,2,"smith","9999")(1rowaffected)以下示例说明访问规则如何返回包含访问规则限制的信息的特定行.
示例1返回两行中的信息:第6章:管理用户权限166AdaptiveServerEnterprise/*returnrowswhenempno=1anddeptno=2and(name="smith"orphone="9999")*/select*fromtesttab1empnodeptnonamephone12smith828212jones9999(2rowsaffected)/*unbindaccessrulefromspecificcolumn*/sp_unbindrule"testtab1.
empno",NULL,"accessrule"/*Ruleunboundfromtablecolumn.
*/(returnstatus=0)示例2返回四行中的信息:/*returnrowswhendeptno=2and(name="smith"orphone="9999")*/select*fromtesttab1empnodeptnonamephone12smith828222smith999932smith888812jones9999(4rowsaffected)/*unbindalldeptnorulesfromspecificcolumn*/sp_unbindrule"testtab1.
deptno",NULL,"all"/*Ruleunboundfromtablecolumn.
*/(returnstatus=0)示例3返回六行中的信息:/*returntherowswhenname="smith"orphone="9999"*/select*fromtesttab1empnodeptnonamephone11smith324512smith828222smith999932smith888812jones999923jones9999第6章:管理用户权限安全性管理167访问规则和altertable命令如果表所有者使用altertable命令,则在执行此命令期间将禁用访问规则,并在命令完成后启用.
在执行altertable命令期间禁用访问规则是为了避免过滤表数据.
访问规则和bcp使用bcp从表中向外复制数据时,SAPASE将强制执行访问规则.
由于对表具有select权限的任何用户都可以使用bcp,所以SAPASE不能像对altertable那样禁用访问规则.
为了安全目的,在批量拷出期间,数据库所有者应以独占方式锁定表并禁用访问规则.
禁用访问规则时,此锁定禁止其他用户访问.
复制完数据之后,数据库所有者应绑定访问规则并将表解锁.
访问规则作为用户定义的Java函数访问规则可以使用用户定义的Java函数.
例如,可以使用Java函数编写复杂的规则,在规则中使用应用程序的配置文件、登录到应用程序的用户和当前指派给用户的应用程序的角色.
以下Java类使用GetSecVal方法来演示如何在访问规则中使用将JDBC用作用户定义函数的Java方法:importjava.
sql.
*;importjava.
util.
*;publicclasssec_class{staticString_url="jdbc:sybase:asejdbc";publicstaticintGetSecVal(intc1){try{PreparedStatementpstmt;ResultSetrs=null;Connectioncon=null;intpno_val;pstmt=null;Class.
forName("sybase.
asejdbc.
ASEDriver");con=DriverManager.
getConnection(_url);if(con==null){return(-1);}pstmt=con.
prepareStatement("selectclassificationfromsec_tabwhereid=");if(pstmt==null){return(-1);第6章:管理用户权限168AdaptiveServerEnterprise}pstmt.
setInt(1,c1);rs=pstmt.
executeQuery();rs.
next();pno_val=rs.
getInt(1);rs.
close();pstmt.
close();con.
close();return(pno_val);}catch(SQLExceptionsqe){return(sqe.
getErrorCode());}catch(ClassNotFoundExceptione){System.
out.
println("Unexpectedexception:"+e.
toString());System.
out.
println("\nThiserrorusuallyindicatesthat"+"yourJavaCLASSPATHenvironmenthasnotbeensetproperly.
");e.
printStackTrace();return(-1);}catch(Exceptione){System.
out.
println("Unexpectedexception:"+e.
toString());e.
printStackTrace();return(-1);}}}在编译完Java代码后,可以从isql中运行相同的程序,如下所示.
例如:javacsec_class.
javajarcufosec_class.
jarsec_class.
classinstalljava-Usa-Password-f/work/work/FGAC/sec_class.
jar--Dtestdb在isql中:/*tocreatenewuserdatatypeclass_level*/sp_addtypeclass_level,int/*tocreatethesamplesecuredatatable*/createtablesec_data(c1varchar(30),c2varchar(30),第6章:管理用户权限安全性管理169c3varchar(30),clevelclass_level)/*tocreatetheclassificationtableforeachuser*/createtablesec_tab(useridint,clevelclass-levelint)insertintosec_tabvalues(1,10)insertintosec_tabvalues(2,9)insertintosec_tabvalues(3,7)insertintosec_tabvalues(4,7)insertintosec_tabvalues(5,4)insertintosec_tabvalues(6,4)insertintosec_tabvalues(7,4)declare@v1intselect@v1=5while@v1>0begininsertintosec_datavalues('8','aaaaaaaaaa','aaaaaaaaaa',8)insertintosec_datavalues('7','aaaaaaaaaa','aaaaaaaaaa',7)insertintosec_datavalues('5','aaaaaaaaaa','aaaaaaaaaa',5)insertintosec_datavalues('5','aaaaaaaaaa','aaaaaaaaaa',5)insertintosec_datavalues('2','aaaaaaaaaa','aaaaaaaaaa',2)insertintosec_datavalues('3','aaaaaaaaaa','aaaaaaaaaa',3)select@v1=@v1-1endgocreateaccessruleclevel_rule@clevel")表13.
SYS_SESSION属性和值属性值username登录名hostname客户端与其连接的主机的名称applname客户端设置的应用程序的名称suserid当前数据库中用户的用户IDgroupid当前数据库中用户的组IDdbid用户当前数据库的IDdbname当前数据库spid服务器进程ID第6章:管理用户权限172AdaptiveServerEnterprise属性值proxy_suserid代理的服务器用户IDclient_name中间层应用程序使用setclient_name设置的客户端名client_applname中间层应用程序使用setclient_applname设置的客户端应用程序名client_hostname中间层应用程序使用setclient_hostname设置的客户端主机名language缺省情况下或使用setlanguage设置后,客户端正在使用的当前语言(@@language)character_set客户端正在使用的字符集(@@client_csname)dateformat客户端需要的日期格式,使用setdateformat设置is_showplan_on如果setshowplan为on,则返回YES,如果为off则返回NOis_noexec_on如果setnoexec为on,则返回YES,如果为off则返回NO使用访问规则和ACF解决问题使用访问规则和ACF的问题解决方案.
此处将为如下问题提供解决方案:有5个用户处于不同的安全级别,每个用户应该只能看到相关值小于或等于该用户安全级别的行.
此解决方案使用访问规则,结合应用程序上下文功能,只显示其中的一个用户Dave可看到的行.
有以下5个登录名:Anne的安全级别为1.
Bob的安全级别为1.
Cassie的安全级别为2.
Dave的安全级别为2.
Ellie的安全级别为4.
用户应该只能看到rlac中的值小于或等于其安全级别的行.
若要实现此目的,可创建一个访问规则并应用ACF.
rlac列的类型为integer,appcontext参数的类型为char.
createaccessrulerlac_ruleas@value@limitbeginselect@loginname=suser_name()print"Abortinglogin[%1!
]:exceedssessionlimit[%2!
]",@loginname,@limit/*abortthissession*/selectsyb_quit()endgograntexeconlimit_user_sessionstopublicgo2.
以系统安全员身份将此存储过程配置为用户"bob"的登录触发器:alterloginbobmodifyloginscript"limit_user_sessions"go现在,当用户"bob"创建SAPASE的第三个会话时,登录触发器将调用syb_quit()函数终止该会话:%isql-SASE125-Ubob-Pbobpassword1>select1第6章:管理用户权限安全性管理1772>goCT-LIBRARYerror:ct_results():networkpacketlayer:internalnetlibraryerror:Net-Libraryoperationterminatedduetodisconnect错误日志文件中将显示以下消息:(.
.
.
)backgroundtaskmessage:Abortinglogin[my_login]:exceedssessionlimit[2]强制执行基于时间的限制可以限制特定登录名的并发连接的数目,并将该登录名限制为在某天的特定时间进行访问.
1.
以系统管理员身份创建此表:createtableaccess_times(suidintnotnull,dayofweektinyint,shiftstarttime,shiftendtime)2.
以系统管理员身份将以下行插入表access_times.
这些行指示允许用户"bob"在星期一上午9点到下午5点登录到服务器,并允许用户"mark"在星期二上午9点到下午5点登录到服务器.
insertintoaccess_timesselectsuser_id('bob'),1,'9:00','17:00'goinsertintoaccess_timesselectsuser_id('mark'),2,'9:00','17:00'go3.
以系统管理员身份创建limit_access_time存储过程,该存储过程引用access_time表来确定是否应授予登录访问权限:createprocedurelimit_access_timeasdeclare@curdatedate,@curdowtinyint,@curtimetime,@cntint,@loginnamevarchar(32)--setupvariablesforcurrentday-of-week,timeselect@curdate=current_date()select@curdow=datepart(cdw,@curdate)select@curtime=current_time()select@cnt=0--determineifcurrentuserisallowedaccessselect@cnt=count(*)fromaccess_timeswheresuid=suser_id()anddayofweek=@curdowand@curtimebetweenshiftstartandshiftendif@cnt=0beginselect@loginname=suser_name()第6章:管理用户权限178AdaptiveServerEnterpriseprint"Abortinglogin[%1!
]:loginattemptpastnormalworkinghours",@loginname--abortthissessionreturn-4endgograntexeconlimit_access_timetopublicgo4.
以系统安全员身份将limit_access_time存储过程配置为用户"bob"和"mark"的登录触发器:alterloginbobloginscript"limit_access_time"goalterloginmarkloginscript"limit_access_time"go在星期一,用户"bob"创建一个会话:isql-Ubob-Ppassword1>select12>go1(1rowaffected)但是,用户"mark"无权访问:isql-Umark-Ppassword1>select12>goCT-LIBRARYerror:ct_results():networkpacketlayer:internalnetlibraryerror:Net-Libraryoperationterminatedduetodisconnect将在错误日志中记录以下消息:(.
.
.
)serverback-groundtaskmessage:Abortinglogin[mark]:loginattemptpastnormalworkinghours上述示例显示了如何限制特定登录名的并发连接的数目,以及如何将该登录名限制为在某天的特定时间进行访问,但它有一个缺点:客户端应用程序无法方便地检测到会话被终止的原因.
要向用户显示一条消息(例如"现在用户太多—请稍后重试"),请使用其它方法.
您可以在存储过程中故意引发一个错误以中止登录触发器存储过程,而不是调用内置函数syb_quit(),该函数将使服务器仅仅是终止当前会话.
例如,用零作除数可以中止登录触发器存储过程、终止会话并导致出现消息.
第6章:管理用户权限安全性管理179登录触发器限制将对以下登录触发器操作进行限制.
不能创建稍后要在会话中使用的#temp表.
过程一旦完成,就将自动删除#temp表并恢复初始会话设置,就像在任何其它存储过程中一样.
不要对sa登录名使用登录触发器;失败的登录触发器会将您锁定在SAPASE之外.
不要对任何执行时间超过几秒的操作或执行过程中可能存在问题的操作使用登录触发器.
发布和信息如果不能访问错误日志,请不要使用登录触发器.
始终检查错误日志中是否有错误消息.
对于SAPASE15.
0.
2及更高版本,当服务器启动时,在登录触发器中设置或取消设置的任何可导出选项都将在登录过程中生效.
要禁用此行为,请在登录触发器内执行setexport_optionsoff.
SAPASE15.
0.
1、12.
5.
4及更低版本要求您使用跟踪标志4073启动服务器来启用登录触发器选项.
客户端应用程序(如isql)不知道登录触发器的存在或执行;它会在成功登录后立即显示命令提示符,虽然SAPASE在登录触发器成功执行前不会执行任何命令.
即使登录触发器终止了用户连接,也会显示该isql提示符.
登录到服务器的用户必须具有execute权限才能使用登录触发器存储过程.
如果未授予execute权限,则错误日志中会显示一条错误消息并且用户连接将立即关闭(虽然isql仍显示命令提示符).
错误日志显示类似于以下内容的消息:EXECUTEpermissiondeniedonobjectmy_proc,databasemy_db,ownerdbo登录触发器存储过程不可以包含没有指定缺省值的参数.
如果存储过程中出现不带缺省值的参数,则登录触发器将失败,并且错误日志中出现类似于以下内容的错误:Proceduremy_procexpectsparameter@param1,whichwasnotsupplied.
.
.
禁用对登录触发器的execute特权数据库所有者或管理员可以禁用对登录触发器的execute特权,也可以对登录触发器编码,以便只允许在特定时间进行访问.
例如,您可能要禁止常规用户在数据库所有者或管理员更新表时使用数据库.
注意:如果登录触发器返回负数,则登录失败.
第6章:管理用户权限180AdaptiveServerEnterprise从登录触发器导出set选项SAPASE允许登录触发器内的set命令选项在整个用户会话期间保持有效.
将自动导出以下set选项:showplanarithabort[overflow|numeric_truncation]arithignore[overflow]colnamesformatstatisticsioprocidrowcountaltnamesnocountquoted_identifierforceplanfmtonlycloseonendtranfipsflaggerself_recursionansinulldup_in_subqueryor_strategyflushmessageansi_permissionsstring_rtruncationprefetchtriggersreplicationsort_resourcestransactional_rpccis_rpc_handlingstrict_dtm_enforcementraw_object_serializationtextptr_parametersremote_indexesexplicit_transaction_requiredstatement_cache第6章:管理用户权限安全性管理181command_status_reportingproc_return_statusproc_output_params设置全局登录触发器使用sp_logintrigger可设置一个在用户每次登录时执行的全局登录触发器.
要执行用户特定操作,请使用alterlogin或createlogin设置用户特定登录触发器.
第6章:管理用户权限182AdaptiveServerEnterprise第7章谓词特权谓词特权包括一套灵活的行级访问控制系统,使您可以在SAPASE访问数据时根据其计算的谓词为不同用户、组或角色授予select、update和delete特权.
如果谓词表示的条件不符合任何数据行的要求,则将拒绝该行进入结果集.
谓词特权可基于行级访问控制(根据数据内容或上下文信息向用户动态授予特权)保护数据隐私,使您能够在服务器而非客户端或Web服务器中实施隐私策略.
谓词可以访问其它对象,如表、SQL函数或内置函数.
对这些其它对象的访问权限根据谓词所有者(谓词特权的授予者)的权限和角色来检查.
对授予目标对象执行select、update或delete命令的用户无需具有对谓词引用对象的显式权限.
谓词特权允许服务提供程序将数据存储在单个数据库中,并将相同的表共享给多个客户,但并不需要每个客户都具有单独的视图和insteadof触发器.
SAPASE根据直接授予用户或者通过用户的组或角色间接授予的谓词特权来过滤特定用户的数据.
访问规则和谓词特权之间的差异介绍谓词特权优于SAPASE15.
7ESD#2之前版本所提供的访问规则的几个方面.
访问规则谓词特权谓词范围只能引用绑定了规则的列.
引用多个列需要多条访问规则.
可引用表中的任何列,或使用子选择引用当前数据库或其它数据库中的任何其它表或函数.
语句范围所有规则均适用于select、update和delete.
不允许对不同类型的访问进行不同的限制.
授予者指定哪个谓词适用于哪种访问.
例如,与选择行相比,对更新行和删除行所施加的访问控制可能会更严格.
组合谓词给出使用and或or组合各项规则的方法,但未给出表达优先分组的方法;例如,((rule1andrule2)orrule3).
无论布尔表达式多么复杂,谓词特权均可构造.
可对以明确定义的规则为基础的同一对象组合多项特权.
限制主题范围特定主题的任何定向限制都必须表达为规则的一部分,例如wherename=user.
可将谓词应用于所选用户、组或角色,而无需管理员将复杂的逻辑引入该谓词中.
与权限系统相集成与SQL授权分离.
需要规则分析来了解如何限制用户的某一操作.
通过权限系统强制执行.
诊断命令允许应用程序开发人员预测谓词如何修改查询.
安全性管理183用于谓词特权的命令使用以下命令授予和撤消谓词特权.
grant.
.
.
where–根据通过where子句所表达的条件向组、角色或单个用户授予行级访问控制.
grantrole.
.
.
where–授予激活取决于where子句计算的角色.
revoke.
.
.
[with{pred_name|{all|no}predicates}]–撤消谓词特权.
setshow_transformed_sql–显示完整的SQL文本,包括为行级过滤而添加的谓词.
请参见《参考手册:命令》.
将SAPASE配置为使用谓词特权将SAPASE配置为使用谓词特权.
1.
启用SAPASE安全性和目录服务所必需的ASE_SECDIR许可证.
2.
配置enablepredicatedprivileges配置参数.
3.
设置permissioncacheentries的值.
如果授予对多个谓词特权所限制的单个表的访问权限,则会增加需要的保护高速缓存条目的数量.
对于需要多个谓词计算的所有访问,都允许有一个额外的保护高速缓存条目.
4.
考虑是否增加过程高速缓存的大小.
如果执行存储过程的每个用户对该过程所引用的表都具有不同的谓词访问权限,则将为执行该过程的每个用户创建一个单独的计划.
在这种情况下,可能需要增加过程高速缓存的大小.
enablepredicatedprivilegesenablepredicatedprivileges用于启用或禁用谓词特权.
摘要信息缺省值1(打开)有效值0(关闭),1(打开)状态显示级别Comprehensive要求的角色系统管理员配置组enablepredicatedprivileges用于启用或禁用谓词特权.
第7章:谓词特权184AdaptiveServerEnterprise授予谓词特权grant用于根据where子句所指定的条件授予对表的行级访问控制.
语法为:grant{all[privileges]|permission_list}ontable_name[correlation_name][(column_name_list)][wheresearch_conditions[aspred_name]]to{public|name_list|role_list}[withgrantoption]请参见《参考手册:命令》.
针对某个表的grant.
.
.
where语句用于根据该表定义允许或不允许行进入结果集的select、update或delete命令的条件.
search_conditions充当行过滤器,以处理在select、update或delete中指定的where子句.
可以组成包含复杂SQL条件和引用函数、表以及SQL函数的search_conditions.
但是,谓词特权无法引用视图.
以下示例给予工程师查看其自己薪水以及报告给他们的工人薪水的权限:grantselectonemployee(salary)whereename=USERoremgr=USERtoeng_role该语句根据select命令(包括作为复合命令一部分的select,例如selectinto、insertselect和updatefrom以及由视图覆盖的select命令)以及在where子句中引用salary列的select、update和delete命令来过滤行.
谓词有效地限制了工人之间互查薪水.
SAPASE在根据表处理查询时应用grant语句中的where子句,并在执行查询时对条件进行计算.
授予对select数据的访问权限grantselect命令的where子句与select命令中任何最终用户的where子句组合使用,以限定从select操作返回的行.
对没有列列表的表使用grant.
.
.
where语句以过滤行,而不考虑选定的各个列.
该grant语句允许project_leaders只读写其所管项目的信息:grantselectonprojectswhereuser_id()=p_mgridtoproj_leader_role将列或列列表与grant命令配合使用,以在select访问特定列时过滤行.
这些grant语句允许工程师互访姓名及部门,同时只允许工程师的经理访问其电话号码:grantselectonemployee(ename,edept)toeng_role第7章:谓词特权安全性管理185grantselectonemployee(ephone)whereuser_id()=emgrtoeng_role授予对update数据的访问权限grantupdate命令的where子句与select命令中最终用户的where子句组合使用,以限定update操作的目标行.
将列或列列表与grant.
.
.
update语句配合使用,以过滤仅更新特定列的行.
以下示例允许所有管理和医务人员更新患者的地址,但只有患者的医师才能修改医疗状态:grantupdateonpatients(address,phone)topublicgrantupdateonpatients(medical_status)whereUSER=primary_mdtodoctor_role如果任何其他用户(不是具有doctor_role角色的用户)尝试更新患者的医疗状态,则update命令将引发权限错误.
它还限制医生可以更新的行和列.
授予对delete数据的访问权限grantupdate命令的where子句与最终用户的where子句组合使用,以限定要删除的行.
以下示例授予Bob删除销售数据的权限:grantdeleteonemployeewhereedept='sales'toBob现在,当Bob运行以下语句时:deleteemployeewherestatus='terminated'SAPASE会在内部将该语句运行为:deleteemployeewherestatus='terminated'andedept='sales'使用谓词特权强制执行数据隐私策略grant语句可用于强制执行限制员工查看私人数据的策略.
在以下示例中,grant语句强制执行的策略限制员工查看他人薪水、允许经理查看其组内成员的薪水,并限制人力资源部门只在十二月份更新薪水:grantselectonemployeease(esalary)wheree.
ename=USERorUSERin(selectusername(mgrid)fromdeptsdwhered.
deid=e.
eid)topublicgrantupdateonemployee(esalary)wheredatepart(month,current_date())12tohr_role第7章:谓词特权186AdaptiveServerEnterprise撤消谓词特权使用revoke命令撤消对表的行级访问.
语法为:revoke{all[privileges]|[all]permission_list}ontable_name(column_list)[with{pred_name|{all|no}predicates}]from{public|name_list|role_list}如果column_list与pred_name配合使用,则会撤消对指定列的谓词行级访问.
如果有其余列由此行级特权引用,则该特权及其相关的命名谓词都保留在sysprotects中.
对于以下revoke示例,假定初始授予的权限如下:grantselectont1(col1,col2,col3)wherecol4>99aspred1touser1以下内容撤消针对t1.
col2且带有pred1的select权限:revokeselectont1(col2)withpred1fromuser1但是,如果user1选择t1.
col3,则仍会应用pred1:如果授权者还发出了以下命令:revokeselectont1(col1,col3)withpred1fromuser1或,revokeselectont1withpred1则会从user1撤消使用pred1的所有t1相关权限.
使用with子句撤消所有谓词、名称谓词或仅删除命名被授予者的给定访问权限的不带谓词授权.
如果忽略with子句,则会撤消谓词授权和非谓词授权.
以下示例撤消授予给user1的所有谓词行级特权.
revokeselectont1withallpredicatesfromuser1以下示例忽略with子句,并撤消授予给user1的所有非谓词select访问的非谓词授权.
revokeselectont1withnopredicates请参见《参考手册:命令》.
第7章:谓词特权安全性管理187SAPASE如何将谓词特权保存在sysprotects中对于不包括谓词的grant命令,已授予特权的优先规则与被授予者有关,指定了较高级别的grant可删除较低级别的grant.
但是,如果优先级较高的grant为谓词,则通常在sysprotects中保留优先级较低的行.
在以下示例中,public的第二个非谓词grant导致SAPASE删除单个user1的早期grant:grantselectont1touser1grantselectont1topublic但是,带谓词的授权允许保留优先级较低的授权.
例如,下面针对user1的第一个grant是通用的,但针对public且与t1相关的第二个grant是有条件的.
SAPASE不会删除针对user1的grant,即使被授予者public具有较高的优先级:grantselectont1touser1grantselectont1wherecol1=4topublic以下示例中添加了第二个grant,但特权被记录为对t1中所有列(col1除外)的条件访问权限:grantselectont1(col1)touser2grantselectont1wherecol1=4touser2第一个grant并未删除,因为它给予user2对列col1进行非条件访问的权限,该权限比通过第二个grant对col1进行条件访问的权限更强大.
谓词角色激活根据某些条件使用grantrole.
.
.
where命令限制角色激活.
只有活动角色才具有访问特权.
具有激活谓词的角色的被授予者可能是用户或登录配置文件(登录配置文件是已分配用户登录时对其所应用的属性模板).
语法为:grantrolerole_name[wherepred_expression]to{username|login_profile_name}wherepred_expression子句是角色激活谓词或激活命名角色时必须满足的SQL条件.
向用户或登录配置文件授予角色时,请使用pred_expression.
注意:您必须处于master数据库中才能授予具有激活谓词的角色.
第7章:谓词特权188AdaptiveServerEnterprise角色激活谓词(如谓词特权)可访问数据库对象(例如表、视图、SQL函数和内置函数).
这些访问权限根据谓词所有者(角色的授予者)的权限和角色来检查,而无需执行setrole语句的用户通过谓词访问对象的显式权限.
注意:虽然可以引用带激活谓词的视图,但您无法引用带行过滤谓词的视图.
以下示例允许登录名"Bob"在非高峰期对服务器进行维护.
如果Bob尝试在上午8点和下午6点这一期间启用oper_role,则会返回一个错误.
grantroleoper_rolewheredatepart(hour,current_time())notbetween8and18toBob如果激活谓词用于对用户或登录配置文件执行grantrole命令,则会在下列任一情况下对谓词进行计算:登录期间角色被指定为用户的缺省角色时,登录期间角色被授予给登录配置文件且已添加为自动激活的角色,用户尝试设置角色时.
向登录配置文件授予的角色适用于分配给此配置文件的所有用户,且可根据谓词计算在登录时指定用于自动激活.
例如,以下示例允许与admin登录配置文件相关联的用户在使用resource_monitor应用程序时采用sa_role:grantrolesa_rolewhere(selectget_appcontext('SYS_SESSION','applname'))='mon_resource'tologinprof_admin如果角色激活谓词的计算结果为false,将为setrole命令返回一个错误,或者在登录期间不设置缺省值或自动激活角色,也不加以提示.
组合谓词以强制执行行级特权SAPASE可组合谓词并将其附加至特定表的update、delete或select命令.
具体考虑以下因素完成此操作:多个授予者–grant命令跨所有受影响的列应用于特定被授予者或者其组或角色,以便一个或多个授予者进行同一访问.
多个列集–grant命令跨不同的列集应用于特定被授予者或者其组或角色,以便一个或多个授予者进行同一访问.
不同访问–对同一对象所授予的特权用于不同的访问.
如果特定用户在用户或组级别进行访问的权限存在revoke行,则汇总的授权包含适用于用户角色集的谓词.
组合谓词时,SAPASE遵守一组规则.
第7章:谓词特权安全性管理189示例以下示例假定您创建了此表:createtableemployee(eidintnotnull,enamechar(8)notnull,eaddrvarchar(20)notnull,ecitychar(10)notnull,ezipchar(5)notnull,ephoneintnotnull,esalarymoneynotnull,edeptchar(10)notnull)同时插入下列值:insertemployeevalues(1001,'Bill','6TreeSt','Baytown','97364',3973465,100000,'eng')insertemployeevalues(1009,'Sally','2SunDr','Henton','97821',1239786,50000,'sales')insertemployeevalues(1005,'Drew','7InnRd','Denville','29052',4960034,110000,'payroll')insertemployeevalues(1010,'Navid','1BatAve','Busitown','60734',3094509,175000,'hr')insertemployeevalues(1004,'Pat','5DotLn','Toytown','33109',4247184,90000,'eng')insertemployeevalues(1006,'Sue','4TipSt','Uptown','76420',5258641,200000,'sales')示例1:组合针对同一个表访问的多个授权中的谓词当所有谓词都应用于用户命令所引用的列时,使用布尔运算符or来组合针对同一个表访问的多个授权中的谓词.
如果向用户直接或间接(例如,通过角色)授予针对同一访问和同一对象的多项谓词特权,则使用or参数组合各个grant命令中的谓词.
针对单个访问且带谓词的附加授权通常导致用户看到多个行.
例如,用户Ben(销售经理)已被授予对employee表的下列权限:grantselectonemployeewhereedept="sales"tosales_mgr_rolegrantselectonemployee(eid,ename,eaddr,ezip)whereeziplike"97%"toben第7章:谓词特权190AdaptiveServerEnterprise如果Ben在sales_manager_role激活时执行此语句,eid和ename列将受两个谓词grant命令所影响:selecteid,enamefromemployeeSAPASE在内部执行以下语句:selecteid,enamefromemployeewhereedept="sales"oreziplike"97%"SAPASE然后返回:eidename1001Bill1009Sally1006Sue示例2:组合应用于不同列集的多个授权中的谓词使用布尔运算符or和and来组合应用于不同列集的多个授权中的谓词.
当谓词集中的各个谓词对结果集的影响不同时,SAPASE使用布尔运算符or来组合每列上用于给定访问的所有谓词.
这些布尔表达式通过布尔运算符and跨所有列进行组合.
例如,Ben已被授予与示例1中相同的特权,但影响员工列子集的第一个grant除外:grantselectonemployee(esalary)whereedept="sales"tosales_mgr_rolegrantselectonemployee(eid,ename,eaddr,ezip)whereeziplike"97%"toben当Ben执行此语句时,SAPASE会通知ename和esalary列受不同的grant命令所影响:selectename,esalaryfromemployeeSAPASE在内部执行以下语句:selectename,esalaryfromemployeewhereedept="sales"andeziplike"97%"SAPASE然后返回:enameesalarysally50000第7章:谓词特权安全性管理191示例3:组合针对不同访问的多个授权中的谓词使用布尔运算符and来组合用于不同访问的多个授权中的谓词.
如果使用一个谓词将对象的selectaccess授予给主题、使用另一谓词授予updateaccess,并且这两个谓词授权均为访问的必需项,则使用布尔运算符and组合两个谓词.
例如,第一个grant允许加利福尼亚管理员查看居住在区域代码为"97…"的员工.
通过第二个grant,这些管理员只能更新年薪低于100,000美元的员工:grantselectonemployeewhereeziplike"97%"tocalif_admingrantupdateonemployees(esalary)whereesalary{value|on|off}执行以下系统过程:sp_cmp_all_qplanssp_cmp_qplanssp_find_qplanssp_flush_query_tuningsp_flushmetricssp_flushstatssp_metrics(for'filter','show','help')sp_showplan执行以下dbcc命令:dbcctraceoff(3604,3605)dbcctraceon(3604,3605)dbccnodetraceoff(3604,3605)dbccnodetraceon(3604,3605)第8章:细化权限安全性管理233特权名称特权授权的操作manageresourcelimit执行以下系统过程:sp_add_resource_limitsp_add_time_rangesp_drop_resource_limitsp_drop_time_rangesp_help_resource_limitsp_modify_resource_limitsp_modify_time_range其它connect*使用connect命令连接到任何服务器kill撤消特权拥有者所拥有的进程killanyprocess撤消任何用户所拥有的任何进程mapexternalfile将代理表映射到远程服务器上的目录或文件monitorserverreplication显示复制状态执行以下系统过程:sp_config_rep_agent(未指定配置值,指定或不指定数据库名称)sp_help_rep_agent(指定或不指定数据库名称)setproxy执行setproxy,以将标识更改为另一用户settracing*执行以下命令:settracefile(针对自己的会话)setplanforon|offsetoptionon|off执行以下dbcc命令:dbcctraceoff(3604,3605)dbcctraceon(3604,3605)dbccnodetraceoff(3604,3605)dbccnodetraceon(3604,3605)第8章:细化权限234AdaptiveServerEnterprise特权名称特权授权的操作settracinganyprocess执行以下命令:settracefile(针对任何会话)setplanforon|offsetoptionon|off执行以下dbcc命令:dbcctraceoff(3604,3605)dbcctraceon(3604,3605)dbccnodetraceoff(3604,3605)dbccnodetraceon(3604,3605)setswitch启用或禁用任何跟踪标志执行以下命令:setswitchshowswitch执行以下dbcc命令:dbcctraceondbcctraceoffdbccnodetraceondbccnodetraceoff执行此存储过程:sp_dbextend'trace'showswitch显示打开的跟踪标志执行showswitch命令useanydatabase当特权拥有者不是数据库中的有效用户并且数据库中没有"guest"帐户时,访问任何数据库执行usedatabase命令usedatabase当特权拥有者不是数据库中的有效用户并且数据库中没有guest帐户时,访问指定的数据库执行usedatabase命令表28.
数据库范围特权特权名称特权授权的操作权限管理第8章:细化权限安全性管理235特权名称特权授权的操作manageanyobjectpermission授予和撤消对象权限managedatabasepermissions授予和撤消数据库特权管理用户manageanyuser执行以下系统过程:sp_addaliassp_addgroupsp_addusersp_changegroupsp_dropaliassp_dropgroupsp_dropuser设置用户setuser模拟另一用户复制管理第8章:细化权限236AdaptiveServerEnterprise特权名称特权授权的操作managereplica-tion管理数据库中的复制设置执行以下命令:setreplicationsetrepmodesetrepthreshold执行以下系统过程:sp_config_rep_agent(指定数据库名称)sp_help_rep_agent(指定数据库名称)sp_replication_pathsp_reptostandbysp_setrepcolsp_setrepdbsp_setrepdbmodesp_setrepdefmodesp_setreplicatesp_setrepprocsp_setreptablesp_start_rep_agentsp_stop_rep_agent执行以下dbcc命令:dbccgettruncdbccsettrunc维护数据库第8章:细化权限安全性管理237特权名称特权授权的操作managedatabase不访问dbo-owned数据执行数据库维护操作执行以下命令:installjarremovejarclass执行以下系统过程:sp_addobjectdefsp_addsegmentsp_addthresholdsp_checksourcesp_dropobjectdefsp_dropsegmentsp_dropthresholdsp_droptypesp_extendsegmentsp_hidetextsp_merge_dup_inline_defaultsp_modifthresholdsp_placeobjectsp_procxmodesp_rebuild_textsp_spaceusage(针对某些参数)第8章:细化权限238AdaptiveServerEnterprise特权名称特权授权的操作managedatabase(续)执行以下dbcc命令:dbccdbrepair(remap)dbccdbrepair(newthreshold)dbccdbrepair(findstranded)dbccdbrepair(fixlogfreespace)dbccdbrepair(ltmignor)dbccdbrepair(updusg_anchors)dbccdbrepair(auinit)dbccdbrepair(dmap_unlock)dbccrebuild_textdbccrefreshids(placeobject)dbccrefreshpdesdbccupdate_tmodedbccupgrade_obj执行以下内置函数:derived_statidentity_burn_maxlct_adminnext_identity管理查询计划manageabstractplans执行以下系统过程:sp_add_qpgroupsp_cmp_all_qplanssp_cmp_qplanssp_copy_all_qplanssp_drop_all_qplanssp_drop_qpgroupsp_drop_qplansp_export_qpgroupsp_find_qplansp_help_qpgroupsp_help_qplansp_import_qpgroupsp_rename_qpgroupsp_set_qplandbcc第8章:细化权限安全性管理239特权名称特权授权的操作dbcccheckalloc*在数据库中执行dbcccheckallocdbcccheckcata-log*在数据库中执行dbcccheckcatalogdbcccheckdb*在数据库中执行dbcccheckdbdbcccheckindex*在数据库中执行dbcccheckindexdbcccheckstor-age*在数据库中执行dbcccheckstoragedbccchecktable*在数据库中执行dbccchecktabledbcccheckverify*在数据库中执行dbcccheckverifydbccfix_text*在数据库中执行dbccfix_textdbccindexalloc*在数据库中执行dbccindexallocdbccreindex*在数据库中执行dbccreindexdbcctablealloc*在数据库中执行dbcctableallocdbcctextalloc*在数据库中执行dbcctextallocmanagecheckstor-age在数据库上管理dbcccheckstorage相关设置(使用授予特权的过程指定)执行以下dbccstored过程:sp_dbcc_deletedbsp_dbcc_deletehistorysp_dbcc_evaluatedbsp_dbcc_exclusionssp_dbcc_patch_finishtimesp_dbcc_updateconfig第8章:细化权限240AdaptiveServerEnterprise特权名称特权授权的操作reportcheckstor-age执行dbcc过程,以在数据上生成关于dbcccheckstorage结果的报告(使用授予特权的过程指定)执行以下dbcc存储过程:sp_dbcc_configreportsp_dbcc_differentialreportsp_dbcc_faultreportsp_dbcc_fullreportsp_dbcc_recommendationssp_dbcc_statisticsreportsp_dbcc_summaryreport系统目录selectanyaudittable选择sybsecurity中的任何审计表(仅适用于sybsecurity数据库)selectanysystemcatalog选择当前数据库内任何系统表中的所有列truncateanyau-dittable截断sybsecurity中的任何审计表(仅适用于sybsecurity数据库)updateanysecur-itycatalog更新、插入以及删除这些有直接更新限制的安全性相关系统目录:master.
dbo.
sysloginsmaster.
dbo.
syssrvrolesmaster.
dbo.
sysloginrolesdb.
dbo.
sysrolesdb.
dbo.
sysprotects注意:必须启用配置参数allowupdatestosystemtables,之后才可以更新目录.
管理对象alteranyobjectowner更改数据库中所有对象的所有权执行alter.
.
.
modifyowner命令第8章:细化权限安全性管理241特权名称特权授权的操作createanyobject创建任何人拥有的下列任一对象:表视图过程函数缺省值规则索引触发器执行以下命令:createtablecreateviewcreateprocedurecreatefunctioncreaterulecreatedefaultcreatetriggercreateindexdropanyobject删除任何人拥有的下列任一对象:表视图过程函数缺省值规则索引触发器执行以下命令:dropdefaultdropfunctiondropindexdropproceduredropruledroptabledroptriggerdropview管理加密第8章:细化权限242AdaptiveServerEnterprise特权名称特权授权的操作createencryptionkey*在数据库中创建加密密钥manageanyen-cryptionkey创建、更改以及删除任何人拥有的列加密密钥、主密钥和服务密钥执行以下命令:createencryptionkeyalterencryptionkeydropencryptionkey执行sp_encryptionmanagecolumnen-cryptionkey创建、更改以及删除列加密密钥managemasterkey创建、更改以及删除主密钥manageservicekey创建、更改以及删除服务密钥缺省值createdefault*创建自有的缺省值执行createdefault命令createanyde-fault创建任何人拥有的缺省值执行createdefault命令dropanydefault删除任何人拥有的缺省值执行dropdefault命令函数createfunction*创建自有的用户定义函数执行以下命令:createfunctioncreatefunction(SQLJ)createanyfunc-tion创建任何人拥有的函数执行以下命令:createfunctioncreatefunction(SQLJ)第8章:细化权限安全性管理243特权名称特权授权的操作dropanyfunction删除任何人拥有的函数执行以下命令:dropfunctiondropfunction(SQLJ)executeanyfunc-tion运行任何人拥有的用户定义函数执行execute命令索引createanyindex在任何人拥有的表上创建索引执行createindex命令过程createprocedure创建自有过程执行createprocedure命令createanyproce-dure创建任何人拥有的过程执行createprocedure命令executeanypro-cedure执行任何人拥有的过程执行execute命令dropanyproce-dure删除任何人拥有的过程执行dropprocedure命令规则createrule*创建自有规则执行createrule命令createanyrule创建任何人拥有的规则执行createrule命令dropanyrule删除任何人拥有的规则执行droprule命令表alteranytable更改任何人拥有的用户表执行altertable命令第8章:细化权限244AdaptiveServerEnterprise特权名称createanytable特权授权的操作创建任何人拥有的用户表执行createtable命令createtable*创建自有的用户表执行createtable命令decryptanytable解密所有加密表deleteanytable删除任何人拥有的用户表的行执行以下命令:deletetablelocktabledropanytable删除任何人拥有的用户表执行droptable命令identity_insertanytable启用或禁用任何用户表上的identity_update执行setidentity_insert命令identity_updateanytable启用或禁用任何用户表上的identity_insert执行setidentity_update命令insertanytable插入任何人拥有的用户表执行以下命令:insertlocktablemanageanysta-tistics更新或删除任何人拥有的任何表上的统计信息执行以下命令:deletestatisticsupdatestatistics执行sp_modifystatsreferencesanytable引用任何人拥有的用户表reorganytable重组任何人拥有的用户表执行reorg命令第8章:细化权限安全性管理245特权名称特权授权的操作selectanytable选择任何人拥有的用户表执行以下命令:selectlocktable(针对共享锁定)readtexttransferanyta-ble向(从)任何人拥有的用户表传输数据执行transfertable命令truncateanyta-ble截断任何人拥有的用户表执行truncatetable命令updateanytable更新任何人拥有的用户表执行以下命令:updatelocktablewritetext触发器createtrigger*创建自有触发器.
执行createtrigger命令createanytrig-ger创建任何人拥有的触发器执行createtrigger命令dropanytrigger删除任何人拥有的触发器执行droptrigger命令视图createview*创建自有视图执行createview命令createanyview创建任何人拥有的视图执行createview命令dropanyview删除任何人拥有的视图执行dropview命令第8章:细化权限246AdaptiveServerEnterprise第9章数据的保密性SAPASE安全服务支持安全套接字层(SSL)的基于会话的安全性.
SSL是一种用于保护通过Internet传输敏感信息(例如信用卡号、股票交易和银行交易)的标准.
虽然全面讨论公开密钥密码术超出该文档的范围,但是基本的信息值得说明一下,以便您对SSL如何保护Internet通信信道有所了解.
该文档不是一个关于公开密钥密码术的综合指南.
SSL功能的实现基于以下假定:有一名知识渊博的系统安全员,他熟悉安全性策略和您节点的需要,以及对SSL和公开密钥密码术有一般性的了解.
TCP/IP是在客户端/服务器计算中用到的主要传输协议,也是管理Internet上数据传输的协议.
TCP/IP使用中间的计算机将数据从发送者传输到接收者.
中间计算机将易于篡改、偷窃、偷听和模拟的不安全连接引入通信系统.
公开密钥密码术现在人们已经开发出几种机制并用以保护通过Internet传输的敏感数据,这些机制统称为公开密钥密码术.
公开密钥密码术由加密、密钥交换、数字签名和数字证书组成.
加密加密是使用密码算法对信息进行编码的过程,以防指定接收者以外的人利用这些信息.
用于加密的密钥类型有两种:对称密钥加密–用相同算法(密钥)来对消息进行加密和解密.
这种形式的加密安全性最差,由于密钥非常简单,因此也就容易解译.
不过,因为这种形式加密和解密消息所需的计算最少,所以使用对称密钥加密的数据的传输速度很快.
公开/私有密钥加密–也称作非对称密钥,是由公开和私有组件组成,用来对消息进行加密和解密的一对密钥.
虽说可能有所不同,但通常来说,消息都是由发送者使用私有密钥加密,而由接收者使用发送者的公开密钥解密.
您可以使用接收者的公开密钥来对消息进行加密,然后接收者使用自己的私有密钥对消息进行解密.
用来创建公开和私有密钥的算法更复杂,因此更不容易破译.
但是,公开/私有密钥加密需要更多的计算、需要通过连接发送更多的数据,因而数据传输速度会明显降低.
密钥交换减少计算开销同时加快事务处理速度,而又不牺牲安全性的方案是:综合使用对称密钥和公开/私有密钥加密,即所谓的"密钥交换".
安全性管理247对于大量数据,用对称密钥来加密原始消息.
然后,发送者使用自己的私有密钥或接收者的公开密钥来加密对称密钥.
加密消息和加密过的对称密钥都将发送给接收者.
根据用于加密消息的密钥(公开或私有),接收者使用相应的策略来解密对称密钥.
一旦键被交换,接收者使用对称密钥来解密消息.
数字签名数字签名用于篡改检测和不否认功能.
数字签名通过数学算法创建,从文本消息生成唯一的、固定长度的数字字符串;其结果称作散列或消息摘要.
为了确保消息完整性,将使用签名者的私有密钥对消息摘要进行加密,然后将消息摘要和有关散列算法的信息一起发送给接收者.
接收者用签名者的公开密钥对该消息进行解密.
此过程还会重新生成原始消息摘要.
如果该摘要匹配,则该消息完整且没被篡改.
如果不匹配,则数据在转接过程中被更改,或者是被冒名者签名.
此外,数字签名提供不否认功能–发送者不能拒绝或否认他们发送了消息,因为他们的私有密钥对消息进行了加密.
很显然,如果私有密钥产生危险(被偷窃或解译),则对于"不否认"功能,数字签名将变得毫无价值.
数字证书数字证书与护照类似:一旦分配给您一个证书,权威部门会有您在系统中的所有身份信息.
与护照类似,数字证书可用来检验一个实体(服务器、路由器及Web站点等)对另一个实体的身份.
SAPASE使用两种类型的证书:服务器证书–服务器证书对持有该证书的服务器进行验证.
证书通常来自受托第三方证书颁发机构(CA).
CA验证拥有者的身份,将拥有者的公开密钥和其它身份信息嵌入到数字证书中.
证书也包含发布CA、验证所含数据的完整性,以及检验其使用状况的数字签名.
CA证书(也称作受托根证书)–是在启动时服务器装载的受托CA的列表.
当服务器作为客户端运行时,例如在远程过程调用(RPC)期间,服务器将使用CA证书.
SAPASE在启动时装载其CA受托根证书.
为RPC连接到远程服务器后,SAPASE将验证签署远程服务器证书的CA是否为列在其自己的CA受托根文件中的"受托"CA.
如果不是,连接将会失败.
证书在一段时期内有效,CA可以因为多种原因撤消该证书,例如当出现安全问题时.
如果一个证书在会话期间被撤消,则会话连接继续.
以后的登录尝试将失败.
同样,当证书到期后,登录尝试将失败.
这些机制的联合使用保护了在Internet上传输的数据免遭窃取和篡改.
这些机制也保护用户免受其他用户欺骗,即一个实体假装成另一个实体(电子欺骗),或者一个人或组织为了特定目的而充当别的用户,其真实企图是获得私有信息(误传).
第9章:数据的保密性248AdaptiveServerEnterpriseSSL概述SSL是一个通过安全网络连接发送在线级或套接字级加密数据的行业标准.
建立SSL连接之前,服务器和客户端交换一系列I/O往返,就安全性加密会话达成一致.
该过程称为"SSL握手".
SSL握手客户端请求一个连接时,在传输数据前,启用SSL的服务器提出认证以证实客户端的身份.
"握手"主要由以下步骤组成:客户端向服务器发送连接请求.
该请求包括客户端所支持的SSL(或传送层安全性,TLS)选项.
服务器返回其认证和所支持的密码成套程序列表,该列表包括SSL/TLS支持选项、密钥交换所用算法和数字签名.
当客户端和服务器就密码成套程序达成一致后,将建立一个安全、加密会话.
有关SSL握手和SSL/TLS协议的详细具体信息,请参见InternetEngineeringTaskForceWeb站点.
SAPASE中的SSLSSL实现提供了多级别的安全性.
服务器验证自身-证实它是否是您所要联系的服务器,并在数据传输之前加密SSL会话.
一旦SSL会话建立后,要求连接的客户端便可以通过此安全、加密的连接发送用户名和口令.
服务器认证时对数字签名进行比较,这样可以确定客户端所收到的数据在到达预期接收者之前是否被修改过.
SAPASE使用OpenSSL作为SSL提供程序.
SSL过滤器SAPASE目录服务(例如interfaces文件、Windows注册表或LDAP服务)定义了服务器地址和端口号,并且确定为客户端连接而强制执行的安全协议.
SAPASE将SSL协议作为过滤器来执行,附加到目录服务的master行和query行.
SAPASE在其上接受连接的地址和端口号是可配置的,因此您可以为单服务器启用多网络和安全协议.
服务器连接属性由目录服务(如LDAP)指定,或者由传统Sybaseinterfaces文件指定.
所有尝试与具有SSL过滤器的interfaces文件中的master或query条目的连接必须支持SSL协议.
服务器可以配置为接受SSL连接,并且可拥有其它接受明码通信报文(未加密的数据)或使用其它安全性机制的连接.
第9章:数据的保密性安全性管理249例如,UNIX的interfaces文件,它支持基于SSL的连接和明文方式的连接,类似以下内容:SYBSRV1mastertcpethermyhostnamemyport1ssl="CN=my_server_common_name.
mydomain.
com"querytcpethermyhostnamemyport1ssl="CN=my_server_common_name.
mydomain.
com"mastertcpethermyhostnamemyport2与使用interfaces文件(Windows上为sql.
ini)中的SECMECH(安全性机制)行定义的其它安全性机制(例如Kerberos)相比,SSL过滤器有所不同.
通过证书进行的验证SSL协议需要通过服务器证书验证服务器来启用加密会话.
同样,当SAPASE在RPC期间作为客户端运行时,必须有一个受托CA存储库,客户端连接可以访问该库以验证服务器证书.
服务器证书每个SAPASE必须拥有自己的服务器证书文件,该文件在启动时装载.
下面是证书文件的缺省位置,其中servername是启动过程中使用-s标志在命令行上指定或通过环境变量$DSLISTEN指定的服务器的名称:UNIX–$SYBASE/$SYBASE_ASE/certificates/servername.
crtWindows–%SYBASE%\%SYBASE_ASE%\certificates\servername.
crt服务器证书文件由编码数据组成,包含服务器的证书和服务器证书的加密私有密钥.
或者,可以在使用sp_ssladmin时指定服务器证书文件的位置.
注意:若要成功进行客户端连接,证书中的公用名必须与interfaces文件中的服务器名称匹配.
CA受托根证书SAPASE在启动时从受托根文件装载受托CA列表.
受托根文件在格式上与证书文件类似,只是受托根文件包含SAPASE所知的CA证书.
本地服务器可在以下文件中访问受托根文件,其中servername是服务器的名称:UNIX–$SYBASE/$SYBASE_ASE/certificates/servername.
txtWindows–%SYBASE%\%SYBASE_ASE\certificates\servername.
txt仅当SAPASE作为客户端运行时(例如RPC调用或组件集成服务(CIS)连接时),才会使用受托根文件.
系统安全员使用标准ASCII文本编辑器添加和删除SAPASE所要接受的CA.
警告!
使用SAPASE内的系统安全员角色(sso_role)来限制访问和执行安全性敏感的对象.
第9章:数据的保密性250AdaptiveServerEnterprise连接类型各种可用的客户端到服务器和服务器到服务器的连接.
登录到SAPASE的客户端OpenClient应用程序建立与SAPASE的套接字连接,类似于建立现有的客户端连接的方式.
在传输任何用户数据之前,当客户端完成网络传送级连接调用且服务器端完成接受调用时,在套接字中将产生SSL握手.
服务器到服务器的远程过程调用SAPASE为RPC(远程过程调用)建立的到另一服务器的套接字连接的方式,与现有RPC建立的连接方式相同.
在传输任何用户数据之前,当网络传送级连接调用完成时,在套接字中将产生SSL握手.
如果已经建立服务器到服务器套接字连接,那么将重用现有套接字连接和安全性上下文.
SAPASE在RPC期间作为客户端运行时,它会在连接过程中请求远程服务器的证书.
然后SAPASE验证签署远程服务器证书的CA是否受托;也就是说,验证该CA是否位于受托根文件中其自己受托CA的列表上.
同时也验证服务器证书中的公用名是否与建立连接时使用的公用名匹配.
协同服务器和SSL可以使用协同服务器配置SAPASE以实现故障切换.
必须用相同的SSL和RPC配置来配置主服务器和辅助服务器.
当连接进行故障切换或故障恢复时,连接将重新建立安全性会话.
OpenClient连接组件集成服务、RepAgent、分布式事务管理和其它SAPASE中的模块,使用Client-Library来建立与服务器(SAPASE服务器除外)的连接.
远程服务器由其自身的证书来进行验证.
远程服务器使用用户名和口令验证用于RPC的SAPASE客户端连接.
启用SSLSAPASE确定对基于interface文件(Windows中为sql.
ini)的端口将使用何种安全服务.
1.
获取具有SSL功能的SAPASE许可证.
可以使用ASE_ASM或ASE_SECDIRS许可证.
2.
运行命令:sp_configure"enablessl",1检查运行值是否为1,以及日志文件中是否存在错误.
3.
请求SAPASE服务器的已签署服务器证书.
请参见"请求证书"(第252页).
第9章:数据的保密性安全性管理251a)确保证书文件已进行"私钥"加密、编码,并附加到文件.
b)主题证书的commonName必须与interfaces文件中servername的大小写相匹配.
(可选)您可通过SSL过滤器指定证书中的commonName.
请参见"创建服务器目录条目"(第253页).
4.
运行命令:sp_ssladminaddcert,certificate_path,password5.
在以下位置安装服务器CA证书:$SYBASE/$SYBASE_ASE/certificates/.
txt6.
将服务器条目添加到interfaces文件中.
请参见"创建服务器目录条目"(第253页).
7.
将CA证书复制到客户端的trusted.
txt文件中,缺省情况下,该文件位于$SYBASE/config/trusted.
txt注意:要请求、授权和转换第三方证书,请使用openssl二进制.
有关使用二进制的信息,请参见OpenSSL网站以获得详细信息:OpenSSL.
与其它安全服务(例如Kerberos和NTLAN)不同,SSL既不依赖于OpenClient/OpenServer配置文件libtcl.
cfg的"Security"部分,也不依赖于objectid.
dat中的对象.
系统管理员在规划总物理内存时应考虑SSL使用的内存.
SAPASE中的每个连接(连接包含用户连接、远程服务器和网络监听器)大概需要40K才能进行SSL连接.
内存保留和预分配在内存池中,当需要时由SAPASE和SSLPluslibraries在内部使用.
请求证书系统安全员为SAPASE安装服务器证书和私有密钥.
使用openssl安装服务器证书和私有密钥.
有关详细信息,请用户参见OpenSSL网站:OpenSSL.
要获得认证,您必须从证书发放机构(CA)请求认证.
SAPASE需要SSL证书来使用PEM格式.
但是,证书发放机构可以用非PEM格式发放证书.
必须将证书转换为PEM格式.
如果从第三方请求证书,而且证书的格式是PKCS#12,请使用OpenSSL将证书转换为SAPASE理解的格式.
在配置FIPS之后,MD5散列算法不能用于生成证书.
私有密钥必须为PKCS#8加密格式.
创建用于SAPASE的证书的主要步骤为:1.
生成公开和私有密钥对.
2.
将私有密钥存储在安全的地方.
3.
生成认证请求.
4.
向CA发送认证请求.
第9章:数据的保密性252AdaptiveServerEnterprise5.
CA签署和返回证书后,将证书存储在文件中,然后对证书附加私有密钥.
6.
将证书存储在SAPASE安装目录下.
大多数第三方PKI供应商和一些浏览器包含生成证书和私有密钥的实用程序.
通常,这些实用程序的形式为图形向导,它通过一系列问题提示您来定义证书的区分名和公用名.
遵照向导提供的指导来创建证书请求.
一旦收到已签署的PKCS#12格式的证书,请使用OpenSSL生成证书文件和私有密钥文件.
将两个文件并置到servername.
crt文件(其中servername是服务器名)中,然后将该文件放置在$SYBASE/$SYBASE_ASE下的certificates目录中.
注意:SAPASE在$SYBASE/$SYBASE_OCS/bin目录中包括openssl开放源代码实用程序.
创建服务器目录条目SAPASE接受客户端登录和服务器到服务器的RPC.
SAPASE接受连接的地址和端口号是可配置的,因此可以指定多网络、不同的协议和替代端口.
在interfaces文件中,将SSL指定为master和query行上的过滤器.
以下示例显示在UNIX环境下使用SSL的服务器的条目:SYBSRV1mastertcpethermyhostnamemyportssl="CN=my_server_common_name.
mydomain.
com"querytcpethermyhostnamemyportssl="CN=my_server_common_name.
mydomain.
com"Windows上使用SSL和Kerberos安全性机制的服务器的条目可能类似于:[SYBSRV1]query=nlwnsck,myhostname,myport,sslmaster=nlwnsck,myhostname,myport,ssl示例中SECMECH行包含对象标识符(OID),它表示安全性机制Kerberos.
OID(对象标识符)的值在以下文件中定义:UNIX–$SYBASE/$SYBASE_OCS/config/objectid.
datWindows–%SYBASE%\%SYBASE_OCS\ini\objectid.
dat这些示例中,SSL安全服务在端口号(myport)上指定.
注意:同时使用SSL和SECMECH安全性机制的目的是便于从SECMECH迁移到SSL安全性.
管理证书要管理SAPASE中的SSL和证书,请使用sp_ssladmin.
执行存储过程需具备sso_role.
sp_ssladmin用于:第9章:数据的保密性安全性管理253添加本地服务器证书.
可以添加证书和指定用来加密私有密钥的口令,或在启动期间需要在命令行上输入口令.
删除本地服务器证书.
列出服务器证书.
sp_ssladmin的语法为:sp_ssladmin{[addcert,certificate_path[,password|NULL]][dropcert,certificate_path][lscert][help]}[lsciphers][setciphers,{"FIPS"|"Strong"|"Weak"|"All"|quoted_list_of_ciphersuites}]例如:sp_ssladminaddcert,"/sybase/ASE-12_5/certificates/Server1.
crt","mypassword"此示例为本地服务器添加一个条目,即Server1.
crt,该条目位于绝对路径/sybase/ASE-12_5/certificates(Windows上为x:\sybase\ASE-12_5\certificates)下的证书文件中.
私有密钥用口令"mypassword"进行加密.
加密口令应为在创建私有密钥时指定的口令.
接受证书之前,sp_ssladmin验证:可以使用提供的口令对私有密钥解密(被指定为NULL时除外).
证书中的私有密钥和公开密钥匹配.
从根CA到服务器认证的认证链有效.
证书中的公用名和interfaces文件中的公用名匹配.
如果公用名不匹配,sp_ssladmin发出警告.
如果没有满足其它标准,则不会将证书添加到证书文件中.
警告!
口令限定为64个字符.
此外,某些平台在创建服务器证书时限制有效口令的长度.
在以下限制范围内选择口令:SunSolaris–32位和64位平台,256个字符.
Linux–128个字符.
IBM–32位和64位平台,32个字符.
HP–32位和64位平台,8个字符.
Windows–256个字符.
使用NULL作为口令的目的是在SSL加密会话开始之前的初始配置SSL期间保护口令.
因为还没有配置SSL,所以连接过程中口令没有加密.
第一次登录时,通过将口令指定为NULL可以避免上述情况.
口令为NULL时,您必须使用-y标志启动dataserver,该标志在命令行提示系统管理员输入私有密钥口令.
第9章:数据的保密性254AdaptiveServerEnterprise在建立了SSL连接并且重新启动了服务器后,再次使用sp_ssladmin,这一次使用实际口令.
这时,SAPASE将加密并存储口令.
以后从命令行启动服务器都要使用加密的口令;启动期间不必在命令行指定口令.
第一次登录时使用NULL口令的另一种替代方法是,通过isql避免远程连接到SAPASE.
可以指定"localhost"作为interfaces文件(在Windows上为sql.
ini)中的hostname以防止客户端进行远程连接.
只能建立本地连接,而且永远不会通过网络连接传送口令.
注意:SAPASE在其网络内存池中具有足够的内存,从而允许sp_ssladminaddcert使用其缺省的内存分配来设置证书和私有密钥口令.
但是,如果另一网络内存消耗程序已被分配了缺省网络内存,则sp_ssladmin可能会失败并向客户端显示以下错误:Msg12823,Level16,State1:Server'servername',Procedure'sp_ssladmin',Line72:Command'addcert'failedtoaddcertificatepath/work/REL125/ASE-12_5/certificates/servername.
crt,systemerror:ErrMemory.
(returnstatus=1)或者可能在错误日志中显示以下消息:.
.
.
ssl_alloc:Cannotallocateusingubfalloc(rnetmempool,131072)一种解决方法是:您可以增加additionalnetworkmemory配置参数.
需要大约500K字节的内存才能使sp_ssladminaddcert成功,因此将额外的网络内存增大到该数量可能会使其成功.
网络内存池在需要时会再次使用该内存,或者您可以在sp_ssladmin成功完成后将additionalnetworkmemory恢复为它以前的值.
性能建立安全会话需要额外的开销,因为数据加密后数据的大小将增加,而且需要额外的计算加密或解密信息.
SSL的额外内存要求将使用于网络吞吐量或建立连接的开销增加50%-60%.
每个用户连接必须有大约40K或更多的内存.
密码成套程序SSL握手期间,客户端和服务器通过密码成套程序对公用安全性协议达成一致.
密码成套程序是启用SSL的应用程序所使用的密钥交换算法、散列方法和加密方法的优先列表.
有关密码成套程序的完整说明,请访问InternetEngineeringTaskForce(IETF)组织http://tools.
ietf.
org/html/rfc5246.
缺省情况下,客户端和服务器均支持的最强大密码成套程序是用于基于SSL会话的密码成套程序.
第9章:数据的保密性安全性管理255注意:列出的密码成套程序符合传送层规范(TLS).
TLS是SSL3.
0的增强版本,并且是SSL3.
0版密码成套程序的一个别名.
@@ssl_ciphersuite通过Transact-SQL全局变量@@ssl_ciphersuite,用户可以了解SSL握手选择了哪个密码成套程序,并验证建立的连接是否为SSL连接.
SAPASE在SSL握手完成时设置@@ssl_ciphersuite.
其值可以是NULL(表示非SSL连接),或包含SSL握手选择的密码成套程序的名称的字符串.
例如,使用SSL协议的isql连接会显示为其选择的密码成套程序.
1>select@@ssl_ciphersuite2>go输出:TLS_RSA_WITH_AES_128_CBC_SHA(1rowaffected)SSL密码成套程序优先选项限制SAPASE所使用的密码成套程序集.
以下两个选项用于显示和设置密码成套程序优先选项:sp_ssladminlsciphers和sp_ssladminsetciphers.
使用这些选项,可以限制SAPASE使用的密码成套程序集,这样,系统安全员便能够控制客户端到服务器的连接或SAPASE服务器的出站连接可使用的加密算法的种类.
SAPASE中的SSL密码成套程序使用内部定义的密码成套程序优先选项集.
若要显示密码成套程序优先选项集的值,请输入:sp_ssladminlscipher若要设置特定的密码成套程序优先选项,请输入:sp_ssladminsetciphers,{"FIPS"|"Strong"|"Weak"|"All"|quoted_list_of_ciphersuites}其中:"FIPS"–是符合FIPS要求的加密算法、散列算法和密钥交换算法的集合.
此列表包括的算法有AES、3DES、DES和SHA1.
"Strong"–是所用密钥长度大于64位的加密算法的集合.
"Weak"–是属于所有受支持的密码成套程序的集合但又不属于strong集合的加密算法的集合.
"All"–是缺省密码成套程序的集合.
quoted_list_of_ciphersuites–以逗号分隔的列表形式指定密码成套程序集,列表中各项按优先顺序排列.
该列表首尾用引号(")括起.
此带引号的第9章:数据的保密性256AdaptiveServerEnterprise列表可以包含任何预定义集合以及单个密码成套程序名称.
未知的密码成套程序名称将导致报告错误,但对优先选项无影响.
sp_ssladminsetciphers将密码成套程序优先选项设置为给定的有序列表.
这样可将可用的SSL密码成套程序限制为由"FIPS"、"Strong"、"Weak"、"All"组成的指定集合或带引号的密码成套程序列表.
此设置会在下一个监听器启动时生效,并且需要您重新启动服务器以确保所有监听器都使用新设置.
您可以显示已经使用sp_ssladminlscipher.
设置的任何密码成套程序优先选项.
如果没有设置任何优先选项,sp_ssladminlscipher将返回0行,表示未设置任何优先选项,并且SAPASE将使用其缺省(内部)优先选项.
升级到SAPASE12.
5.
3版及更高版本时,密码成套程序优先选项为服务器缺省值,并且sp_ssladmin选项lscipher不显示任何优先选项.
服务器使用其缺省优先选项,这些优先选项由"All"定义.
系统安全员应考虑在其节点使用的安全性策略以及可用的SSL密码成套程序,以决定是否限制密码成套程序,以及哪些密码成套程序适合于安全性策略.
如果从SAPASE12.
5.
3版及更高版本升级,并且设置了密码成套程序优先选项,则这些优先选项会在升级后保留.
升级完成后,查看具有当前安全性策略的服务器的密码成套程序优先选项,以及在表中所找到的受支持和不受支持的密码成套程序列表.
如果已设置SSL密码成套程序优先选项,并且需要从服务器上删除所有优先选项并使用缺省优先选项,请使用下列命令,将优先选项从其在系统目录中的存储位置中删除:1>sp_configure'allowupdatestosystemtables',12>go1>deletefrommaster.
.
sysattributeswhereclass=242>go1>sp_configure'allowupdatestosystemtables',02>go只有系统安全员或系统管理员才能执行这些命令.
如果尝试使用任何删除的密码成套程序,将导致SSL握手失败,并且无法连接到SAPASE.
SAPASE中的预定义密码成套程序SSL密码成套程序使用内部定义的密码成套程序优先选项集.
第9章:数据的保密性安全性管理257集名称集中包含的密码成套程序的名称FIPSTLS_RSA_WITH_AES_256_CBC_SHATLS_RSA_WITH_AES_128_CBC_SHATLS_RSA_WITH_3DES_EDE_CBC_SHATLS_DHE_DSS_WITH_3DES_EDE_CBC_SHATLS_DHE_RSA_WITH_3DES_EDE_CBC_SHAStrongTLS_RSA_WITH_AES_256_CBC_SHATLS_RSA_WITH_AES_128_CBC_SHATLS_RSA_WITH_3DES_EDE_CBC_SHATLS_RSA_WITH_RC4_128_SHATLS_RSA_WITH_RC4_128_MD5TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHATLS_DHE_DSS_WITH_RC4_128_SHATLS_DHE_RSA_WITH_3DES_EDE_CBC_SHAWeakTLS_RSA_WITH_DES_CBC_SHATLS_DHE_DSS_WITH_DES_CBC_SHATLS_DHE_RSA_WITH_DES_CBC_SHATLS_RSA_EXPORT1024_WITH_DES_CBC_SHATLS_RSA_EXPORT1024_WITH_RC4_56_SHATLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHATLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHATLS_RSA_EXPORT_WITH_RC4_40_MD5TLS_RSA_EXPORT_WITH_DES40_CBC_SHATLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHATLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA第9章:数据的保密性258AdaptiveServerEnterprise集名称集中包含的密码成套程序的名称AllTLS_RSA_WITH_AES_256_CBC_SHATLS_RSA_WITH_AES_128_CBC_SHATLS_RSA_WITH_3DES_EDE_CBC_SHATLS_RSA_WITH_RC4_128_SHATLS_RSA_WITH_RC4_128_MD5TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHATLS_DHE_DSS_WITH_RC4_128_SHATLS_DHE_RSA_WITH_3DES_EDE_CBC_SHATLS_RSA_WITH_DES_CBC_SHATLS_DHE_DSS_WITH_DES_CBC_SHATLS_DHE_RSA_WITH_DES_CBC_SHATLS_RSA_EXPORT1024_WITH_DES_CBC_SHATLS_RSA_EXPORT1024_WITH_RC4_56_SHATLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHATLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHATLS_RSA_EXPORT_WITH_RC4_40_MD5TLS_RSA_EXPORT_WITH_DES40_CBC_SHATLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHATLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHASAPASE15.
0版和更高版本将不再支持下列密码成套程序:TLS_RSA_EXPORT1024_WITH_DES_CBC_SHATLS_RSA_EXPORT1024_WITH_RC4_56_SHATLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHATLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHATLS_RSA_EXPORT_WITH_RC4_40_MD5TLS_RSA_EXPORT_WITH_DES40_CBC_SHATLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHATLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHAsp_ssladmin示例使用sp_ssladmin显示和设置密码成套程序优先选项的示例.
最初启动时,在设置任何密码成套程序优先选项前,sp_ssladminlscipher不显示任何优先选项.
第9章:数据的保密性安全性管理2591>sp_ssladminlscipher2>go输出:CipherSuiteNamePreference(0rowsaffected)(returnstatus=0)以下示例指定使用FIPS算法的密码成套程序集.
1>sp_ssladminsetcipher,'FIPS'ThefollowingciphersuitesandorderofpreferencearesetforSSLconnections:CipherSuiteNamePreferenceTLS_RSA_WITH_AES_256_CBC_SHA1TLS_RSA_WITH_AES_128_CBC_SHA2TLS_RSA_WITH_3DES_EDE_CBC_SHA3TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA4TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA5TLS_RSA_WITH_DES_CBC_SHA6TLS_DHE_DSS_WITH_DES_CBC_SHA7TLS_DHE_RSA_WITH_DES_CBC_SHA8TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA9TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA10sp_ssladmin输出的优先选项为0(零)表示SAPASE未使用密码成套程序.
如果输出的是其它非零值,则该数值表示SAPASE在SSL握手过程中使用该算法的优先顺序.
SSL握手的客户端选择这些密码成套程序中与其接受的密码成套程序的列表匹配的一个密码成套程序.
此示例使用带引号的密码成套程序列表来设置SAPASE中的优先选项:1>sp_ssladminsetcipher,'TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA'2>goThefollowingciphersuitesandorderofpreferencearesetforSSLconnections:CipherSuiteNamePreferenceTLS_RSA_WITH_AES_128_CBC_SHA第9章:数据的保密性260AdaptiveServerEnterprise1TLS_RSA_WITH_AES_256_CBC_SHA2使用SSL指定公用名目录服务条目中指定的服务器名可与SSL服务器证书用于执行SSL握手的公用名不同.
这样,您将能够为SSL证书公用名使用完全限定域名(例如,server1.
bigcompany.
com).
若要将公用名添加到interfaces文件中,请使用:ase1mastertcpetherhost_nameport_numberssl="CN='common_name'"querytcpetherhost_nameport_numberssl="CN='common_name'"当客户端使用SSL连接到同样使用SSL的SAPASE服务器时,将在interfaces文件中的端口号后面放置SSL过滤器.
目录服务包括您使用dsedit或文本编辑器添加的公用名.
使用sp_listener指定公用名sp_listener包括CN=common_name参数,从而使您能够为SSL证书指定公用名.
语法为:sp_listener'command','[protocol:]machine_name:port_number:"CN=common_name"','engine_number'其中,只有在将ssltcp指定为协议时,才使用CN=common_name.
将依据SSL证书中的common_name对您在此处指定的common_name进行验证.
如果未包括CN=common_name,SAPASE将使用server_name来依据SSL证书中的公用名进行验证.
如果在证书中包括完全限定域名,该名称必须与CN=common_name匹配.
属性名"CN"不区分大小写(可为"CN"、"cn"或"Cn"),但公用名的属性值区分大小写.
例如,若要指定公用名ase1.
bigserver1.
com:sp_listener'start','ssltcp:blade1:17251:"CN=ase1.
bigserver1.
com"','0'有关sp_listener.
的详细信息,请参见《参考手册:过程》.
第9章:数据的保密性安全性管理261Kerberos保密性要想对进出SAPASE的所有消息加密,请将msgconfidentialityreqd配置参数设置为1.
如果此参数为0(缺省值),则不要求消息的保密性,但客户端仍可以建立消息保密性.
例如,若要求所有消息被加密,需执行:sp_configure"msgconfidentialityreqd",1转储和装载数据库时使用口令保护可以使用dumpdatabase命令的password参数保护数据库转储,使其免于未经授权的装载.
如果在进行数据库转储时包括了password参数,则在装载该数据库时,也必须提供此口令.
带口令保护的dumpdatabase和loaddatabase命令的部分语法为:dumpdatabasedatabase_nametofile_name[withpasswd=password]loaddatabasedatabase_namefromfile_name[withpasswd=password]其中:database_name–是进行转储或装载的数据库的名称.
file_name–是转储文件的名称.
password–是您提供的口令,用来保护转储文件免于被未经授权的用户使用.
口令长度必须介于6到30个字符之间.
如果提供的口令少于6个字符或多于30个字符,将发出错误消息.
如果在尝试装载数据库时提供了不正确的口令,将发出错误消息,并且命令将失败.
例如,以下命令使用口令"bluesky"保护pubs2数据库的数据库转储:dumpdatabasepubs2to"/Syb_backup/mydb.
db"withpasswd="bluesky"装载数据库转储时必须使用相同的口令:loaddatabasepubs2from"/Syb_backup/mydb.
db"withpasswd="bluesky"第9章:数据的保密性262AdaptiveServerEnterprise口令和字符集只能将转储装载到另一台具有相同字符集的服务器上.
例如,如果试图将使用ASCII字符集的服务器中的转储装载到一台使用非ASCII字符集的服务器上,由于ASCII口令的值不同于非ASCII口令的值,装载会失败.
用户输入的口令将转换为本地字符集.
由于ASCII字符在字符集间通常表示相同的值,因此,如果某个用户的口令使用的是ASCII字符集,则dump和load的口令在所有字符集中都可以被识别.
删除残留数据要增强数据库数据的安全性,可删除残留数据.
某些删除空间的数据库操作不一定会实际删除数据.
由于该残留数据可对使用dbcc实用程序的用户可见,因此会带来安全威胁.
您可以在用户执行此类数据库操作时自动将残留数据清零.
不能从系统数据库(如master、sybsystemdb和sybsystemprocs)或这些数据库的系统表中删除残留数据.
注意:只有在SAPASE完成残留数据清零后才能重新使用已释放的空间.
根据SAPASE必须删除的数据量,这一过程可能需要很长时间.
可能导致残留数据的操作任何导致空间释放的操作都有可能导致残留数据.
表29.
可能导致残留数据的操作操作说明droptable和dropindex删除表或索引可能导致空间释放,其它对象可以在这之后直接重新使用释放的空间,并且用户可以运行dbcc来查看删除表的内容.
如果在会话级别、数据库级别或表级别设置了eraseresidualdata选项,则会删除残留数据.
altertablealtertable命令(如altertableencryption)会删除实际复制的现有数据并将其以加密形式存储,但不会删除旧的ASCII(或明文口令)数据页面;直接查看数据库设备或使用dbccpage命令即可查看这些命令.
如果在会话级别、数据库级别或表级别设置了eraseresidualdata选项,则会删除残留数据.
第9章:数据的保密性安全性管理263操作说明工作表释放用户查询涉及列的集合时,工作表中可能存在列数据.
这些工作表处理用户查询,并在查询执行结束时释放.
关闭表时释放这些工作表,并且任务将释放这些页面.
可通过在会话级别/数据库级别设置/启用eraseresidualdata选项来删除残留数据.
排序页面释放sort分配磁盘中的页面,用于合并内部列表合并排序的内部运行.
用于外部合并的空间高速缓存在排序元数据结构中,并可重新用于写入最终排序结果.
如果外部合并所分配的空间大于表的大小,则会在排序操作结束后释放并清空高速缓存的范围.
页面清空后的页面释放对表执行删除查询可能导致页面释放;即,如果删除某页中的所有行,则会释放该页面,而且导致该页面中产生残留数据.
删除或缩减数据库执行删除/缩减数据库操作后,物理数据可以保留在已删除的页面中,但使用数据库实用程序时无法看到该数据.
重新使用该空间的唯一方法是在对页面进行零初始化后运行createdatabase或alterdatabase.
reorgrebuild将数据复制到另一空间中,然后重新创建表的索引并组织数据.
之后,使用reorgrebuild释放旧数据(使用复制数据).
如果未设置表级别/会话级别/数据库级别选项,而且表包含敏感信息,则旧数据仍将产生残留数据.
reorgcompact如果页面中的所有行都已提交删除,则会释放页面.
如果在执行SAPASE自动碎片收集机制之前运行reorgcompact,则会释放页面.
如果排队等待reorgcompact的页面来自已启用eraseresidualdata选项的表,则应删除此类页面中的残留数据.
删除临时表由于临时表与任何其它表类似,因此删除包含敏感数据的临时表会导致残留数据的删除.
对于临时表,应在会话级别或表级别设置残留数据删除;设置数据库级别选项无效,因为这些表位于无法设置数据库选项的tempdb中.
第9章:数据的保密性264AdaptiveServerEnterprise启用残留数据删除可将数据标记为敏感,然后将SAPASE配置为在执行删除或更新操作后删除残留数据.
表30.
在不同级别启用残留数据删除级别说明数据库级别使用:sp_dboptiondbname,"eraseresidualdata",true将eraseresidualdata设置为true时,SAPASE将在导致释放的操作完成后自动删除所有残留数据.
注意:使用sp_dboption时不允许细化控制,并且可能会影响性能.
如果可能,请考虑改用set命令启用会话级别功能.
缺省情况下,启用数据库级别选项后,如果没有显式禁用eraseresidualdata,则所有创建的表都会将该选项设置为启用.
要使用sp_dboption设置数据库级别选项,用户必须为系统管理员或数据库所有者.
会话级别使用:seterase_residual_data{on|off}set用于根据您的需要启用或禁用删除残留数据功能.
在会话级别启用此选项后,将删除会话期间发生的所有页面释放的残留数据.
包括将eraseresidualdata选项显式禁用的表的页面释放.
该选项可以由任意用户针对特定会话进行设置,无需特殊权限.
表级别要创建新表,请使用:createtabletable_namewith"eraseresidualdata"{on|off}缺省情况下,不会设置或启用任何选项,即关闭该表的所有功能.
要将现有表的设置更改为启用或禁用残留数据删除,请使用:altertabletable_nameset"eraseresidualdata"{on|off}设置了表的eraseresidualdata选项后,SAPASE会在对表进行任意操作后清理释放的空间,这些操作包括导致残留数据的droptable、deleterow(导致页面释放)、altertable以及dropindex.
将表的该选项显式设置为on/off后,无论数据库如何设置,都可以对在表中产生残留数据的任意操作相应启用/禁用数据清除.
要使用createtable或altertable设置表级别选项,用户必须是数据库的sysusers表中列出的用户,并具备createtable权限.
对于altertable,用户必须是表所有者或数据库所有者(即可以使用setuser命令模拟表所有者),才能设置该选项.
第9章:数据的保密性安全性管理265残留数据删除示例下面的示例说明如何删除残留数据.
示例使用以下两个表:createtablet1(col1int)with"eraseresidualdata"oncreatetablet2(col1int)with"eraseresidualdata"off示例1t1中的残留数据会自动删除,因为该表的eraseresidualdata选项已启用;而t2中的残留数据则不会自动删除,因为该表未设置eraseresidualdata选项,且未设置dboption/会话级别选项:droptablet1godroptablet2go示例2删除t1和t2中的残留数据,因为已在会话级别设置erase_residual_data,该设置将覆盖表级别选项(已设置为显式禁用erase_residual_data):seterase_residual_dataongodroptablet1godroptablet2goseterase_residual_dataoffgo示例3由于删除残留数据的选项是在数据库级别设置的,因此对于表t1该选项为启用,所以对t1执行droptable和truncatetable命令都会导致清除其页面中的所有残留数据.
但是,由于创建表t2时使用了eraseresidualdataoff子句,所以其eraseresidualdata选项为显式禁用.
因此,即使在数据库级别将eraseresidualdata选项设置为true,也不会删除残留数据.
因此,即使在对t2运行droptable和truncatetable后,残留数据仍将保留:createdatabasedb1gosp_dboptiondb1,"eraseresidualdata",truegousedb1gocreatetablet1(colint)goinsertt1values.
.
.
第9章:数据的保密性266AdaptiveServerEnterprisegocreatetablet2(col1int,col2char(10))with"eraseresidualdata"offgotruncatetablet1godroptablet1gotruncatetablet2godroptablet2go示例4在下面的示例中:表t1未显式设置eraseresidualdataoff,但是在数据库级别进行了设置,因此在运行truncatetablet1时会删除t1中的残留数据.
表t2在创建时设置了eraseresidualdata选项,这是因为该选项已在数据库级别设置.
因此,运行truncatetablet2时将删除t2中的残留数据.
表t3显式标记为eraseresidualdataoff,因此即使sp_dboption将eraseresidualdata设置为true,SAPASE运行truncatetablet3时也不会删除残留数据.
createdatabasedb1gousedb1gocreatetablet1(colint)gosp_dboptiondb1,"eraseresidualdata",truegocreatetablet2(col1int,col2char(10))gocreatetablet3(col1int,col2char(10))with"eraseresidualdata"offgotruncatetablet1gotruncatetablet2gotruncatetablet3go示例5在下面的示例中,尽管缺省情况下t1和t2表的eraseresidualdata选项均未设置,但是由于在执行truncatetable命令前已在会话级别启用erase_residual_data,所以t1和t2中的残留数据都将被删除.
第9章:数据的保密性安全性管理267尽管表t3的eraseresidualdata选项显式设置为off,但是由于已在会话级别设置erase_residual_data选项,所以执行truncate命令时仍将删除残留数据.
createdatabasedb1gousedb1gocreatetablet1(colint)gocreatetablet2(col1int,col2char(10))gocreatetablet3(col1int,col2char(10))with"eraseresidualdata"offgoseterase_residual_dataongotruncatetablet1gotruncatetablet2gotruncatetablet3go用于删除残留数据的设置组合SAPASE根据不同级别中的设置删除残留数据.
表31.
设置组合与残留数据删除行为表级别会话级别数据库级别清除OffOffOn是OffOnOff是OnOffOff是OnOffOn是OnOnOff是OffOnOn是Off,显式设置OnOff是Off,显式设置OnOn是Off,显式设置OffOn否在上述设置中,请特别注意以下两个组合:组合1:表级别会话级别数据库级别清除Off,显式设置OnOff是第9章:数据的保密性268AdaptiveServerEnterprise会话级别选项为on时,即使eraseresidualdata的表级别选项显式设置为off,也会对表中释放的页面执行残留数据删除.
因此,请仅在当前会话涉及需要删除的敏感数据时启用会话级别选项,因为不具有该属性的会话中所涉及的表也会删除残留数据,并导致性能降低.
组合2:表级别会话级别数据库级别清除Off,显式设置OffOn否虽然数据库级别选项为on,但不会对表中释放的页面执行残留数据删除,因为表级别选项已显式关闭.
因此,如果表中包含敏感数据,请不要显式关闭表级别选项,因为即使打开数据库级别选项,释放的页面中仍会包含残留数据.
检查是否启用残留数据删除利用系统过程查看是否在表级别、数据库级别以及会话级别启用了残留数据删除.
检查表级别使用sp_help检查是否在表级别设置了eraseresidualdata选项.
例如:altertablet1set"eraseresidualdata"ongosp_helpt1goNameOwnerObject_typeObject_statusCreate_datet1dbousertablekeepfirsttextpageeraseresidualdataJul30201310:30PM(1rowaffected)检查数据库级别使用sp_helpdb检查是否在数据库级别设置了eraseresidualdata选项.
例如:usemastergosp_dboptiondb1,"eraseresidualdata",truegosp_helpdbdb1gonamedb_sizeownerdbidcreateddurabilitylobcomplvlinrowlenstatusdb1700.
0MBsa4Jul22,2013full0NULLeraseresidualdata(1rowaffected)第9章:数据的保密性安全性管理269检查会话级别使用sp_show_options检查是否在会话级别设置了eraseresidualdata选项.
例如:seterase_residual_dataongosp_show_optionsgonumbername[…]110erase_residual_data(13rowsaffected)(returnstatus=0)限制存在一些无法删除残留数据的对象.
表32.
删除残留数据的限制和约束限制说明页级释放清除启用该功能后,您就可以在页面释放级别删除残留数据.
但这样做会导致仅针对页面释放本身删除残留数据,而不会对没有导致页面释放的行级删除执行残留数据删除.
日志记录释放后不会删除syslogs中的残留数据,也不会清除日志记录.
内存数据库不能从内存数据库的页面中删除残留数据.
代理表不能从代理表中删除残留数据.
系统数据库不能从系统数据库(如master、系统tempdb和sybsystemprocs)中删除残留数据.
此外,所执行的释放操作涉及在systemtempdb中创建的表时,不会在数据库级别删除残留数据.
工作表和排序页面操作创建工作表或排序页面时,如果在数据库级别或会话级别设置了残留数据删除选项,则会释放这些页面.
删除数据库如果因任何原因而导致中止或回退删除数据库操作,则eraseresidualdata选项设置为on的完全持久性数据库可能会发生数据丢失,即无法完全确保数据恢复.
第9章:数据的保密性270AdaptiveServerEnterprise第10章审计一个安全系统的基本要素是责任.
确保责任的一种方法是审计系统中的事件.
SAPASE中发生的许多事件都可以记录.
审计是数据库管理系统中安全性的重要组成部分.
可使用审计追踪来检测系统渗透和资源误用情况.
通过检查审计追踪,系统安全员可以对数据库中对象的访问模式进行检测,并可监视特定用户的活动.
可以跟踪特定用户的审计记录,这对于不正确使用系统的用户可起到威慑作用.
每个审计记录都可以记录事件的性质、日期和时间、对它负责的用户以及事件是否成功.
可以审计的事件包括登录和注销、服务器的启动、数据访问命令的使用、访问特定对象的尝试以及特定用户的操作.
审计追踪(或审计记录的日志)允许系统安全员重建系统中发生的事件并评估其影响.
只有系统安全员才能启动和停止审计、设置审计选项以及处理审计数据.
作为系统安全员,您可以为诸如以下事件建立审计:全服务器范围内的与安全性相关的事件创建、删除和修改数据库对象特定用户执行的所有操作或具有特定活动角色的用户执行的所有操作授予或撤消数据库访问权限导入或导出数据登录和注销注意:本章中所提及操作的权限要求假定禁用细化权限.
启用细化权限时,操作可能有所不同.
另请参见第6章,「管理用户权限」(第131页)审计系统审计系统包括sybsecurity数据库、审计队列、配置参数和系统过程.
sybsecurity数据库–包括全局审计选项和审计追踪内存审计队列–在审计记录被写入到审计追踪中之前,将其发送到审计队列中配置参数–用于管理审计系统过程–用于管理审计安全性管理271sybsecurity数据库sybsecurity数据库是在审计安装过程中创建的.
除model数据库中的所有系统表外,它还包括用来跟踪整个服务器范围内审计选项的sysauditoptions系统表和用于审计追踪的系统表.
sysauditoptions包含全局审计选项的当前设置,例如是否为磁盘命令、远程过程调用、用户定义的即席审计记录或所有安全性相关事件启用了审计.
这些选项会影响整个SAPASE服务器.
审计追踪SAPASE在名为sysaudits_01到sysaudits_08的系统表中存储审计追踪.
安装审计时,需要确定要安装的审计表的数量.
例如,如果选择使用两个审计表,则这两个表将命名为sysaudits_01和sysaudits_02.
在任何给定时间,只有一个审计表是当前审计表.
SAPASE将所有审计数据都写入当前审计表中.
系统安全员可以使用sp_configure来设置(或更改)哪个审计表为当前表.
SAP建议使用两个或两个以上审计表,且每个表都位于单独的审计设备上.
这样就可以建立一个稳定运行的审计过程来存档和处理审计表,而不会丢失审计记录并且不需要手动干预.
警告!
SAP强烈反对在生产系统中仅使用一个审计表.
如果仅使用一个审计表,会有可能丢失审计记录.
审计系统将来自内存中的审计队列的审计记录写入到当前审计表中.
当前审计表将近写满时,一个阈值过程可自动将该表存档到另一数据库中.
使用dump和load命第10章:审计272AdaptiveServerEnterprise令可以对存档数据库进行备份和恢复.
使用存档数据库访问权限以只读方式访问备份中的已存档审计表.
请参见《系统管理指南,卷2》中的"存档数据库访问".
另请参见单表审计(第310页)审计追踪管理(第302页)审计队列当被审计的事件发生时,首先向内存中的审计队列添加一条审计记录.
该记录一直保留在内存中,直到被审计进程写入审计追踪.
您可以使用sp_configure的auditqueuesize参数配置审计队列的大小.
配置审计队列的大小之前,应综合考虑在系统崩溃时丢失队列中的记录的风险以及队列充满时性能降低的风险.
只要审计记录在队列中,如果系统崩溃,记录就有可能丢失.
然而,如果队列频繁写满,则整个系统的性能都会受影响.
如果在用户进程尝试生成一条审计记录时审计队列已满,则该进程将休眠,直至队列中有可用空间为止.
注意:由于不会将审计记录直接写入审计追踪,因此不能期望审计记录会立即被存储到当前审计表中.
管理审计系统管理审计系统任务.
1.
安装审计–设置审计表的数量,并为审计追踪和sybsecurity数据库中的syslogs事务日志指派设备.
2.
设置审计追踪管理–编写和建立阈值过程,当前审计表将近写满时,由该过程接管.
此过程将自动切换到新的审计表,并存档当前表的内容.
此外,该步骤还包括设置auditqueuesize和suspendauditwhendevicefull配置参数.
3.
设置sybsecurity数据库中的事务日志管理–确定如何处理sybsecurity数据库中的syslogs事务日志;如何设置trunclogonchkpt数据库选项;以及在trunclogonchkpt设置为禁用的情况下如何为syslogs建立一个最后机会阈值过程.
4.
设置审计选项–使用sp_audit建立要审计的事件.
5.
启用审计–使用sp_configure启用auditing配置参数.
SAPASE开始将审计记录写入当前审计表.
6.
重新启动审计–如果审计进程因出现错误而强制终止,则使用sp_auditrestart重新启动审计.
第10章:审计安全性管理273安装审计系统在AdaptiveServer中首次安装审计有两种方法.
可以使用auditinit实用程序或安装脚本来安装审计系统.
实用程序和安装脚本位于:UNIX:%SYBASE%/ASE-16_0/bin/auditinit%SYBASE%/ASE-16_0/scripts/installsecurityWindows:%SYBASE%\ASE-16_0\install\auditinit.
exe%SYBASE%\ASE-16_0\scripts\instsecu审计设备预安装建议安装审计前请阅读预安装建议.
确定sybsecurity、syslogs和sysaudits表设备的设备位置.
稍后将需要提供这些信息.
为系统配置所需的最小数量审计设备–但至少必须配置三个设备.
以后可以使用sp_addaudittable添加更多审计设备.
请参见《参考手册:过程》.
按一对一的比例安装审计表和设备.
共享相同设备的表还共享相同的阈值上限值.
当设备已满时将无法按顺序使用这些表,因为它们驻留在同一设备上.
将每个审计表安装在它自己的设备上.
这样,您将可以设置一个平稳运行的审计系统,而不会丢失审计记录.
通过使用两个审计表,您可以在一个审计表已满时切换到另一个.
通过使用第三个审计表,如果一个设备出现故障,系统安全员可以安装一个新的阈值过程,该过程将更改设备轮换以跳过损坏的设备,直到该设备修好为止.
使设备的大小大于表的大小.
如果仅使用三个审计表和设备,表的大小和设备大小可以接近,因为您可以通过添加其它审计表和设备来获得更强的审计能力.
如果使用的表和设备达到了上限值(六到八个),则可能需要使设备比表大很多.
如果以后需要更强大的审计能力,但只有少数附加设备或没有附加设备可用,则您可以扩展表大小,使其接近设备的上限大小.
如果您使用的是文件系统设备,请将dsync属性设置为on,或者将directio属性用于该设备.
使用installsecurity在UNIX上安装审计在UNIX平台上使用installsecurity脚本安装SAPASE审计系统.
$SYBASE/ASE-16_0/scripts目录包含一个用于安装审计的installsecurity脚本.
注意:此示例假定服务器使用2K的逻辑页大小.
第10章:审计274AdaptiveServerEnterprise1.
确定供审计设备使用的可用设备号.
2.
使用diskinit和createdatabase命令创建审计设备和审计数据库.
例如:diskinitname="auditdev",physname="/dev/dsk/c2d0s4",size="10M"diskinitname="auditlogdev",physname="/dev/dsk/c2d0s5",size="2M"createdatabasesybsecurityonauditdevlogonauditlogdev3.
使用isql执行installsecurity脚本:cd$SYBASE/ASE-16_0/scriptssetenvDSQUERYserver_nameisql-Usa-Ppassword-Sserver_name-iinstallsecurity4.
关闭SAPASE服务器,然后将其重启.
当您完成这些步骤后,sybsecurity数据库已在自己的段中创建了一个审计表(sysaudits_01).
这时可以启用审计,但应使用sp_addaudittable添加更多的审计表.
有关diskinit、createdatabase和sp_addaudittable的信息,请参见《参考手册:过程》和《参考手册:命令》.
在Windows上使用instsecu安装审计在Windows平台上使用instsecu脚本安装SAPASE审计系统.
%SYBASE%\ASE-16_0\scripts目录包含一个用于安装审计的instsecu脚本.
1.
确定供审计设备使用的下一个可用设备号.
2.
打开一个命令提示窗口.
3.
以"sa"用户身份启动isql程序:isql-Usa-Ppassword-Sserver_name4.
在isql提示符处,使用diskinit命令创建审计设备.
以下是配置审计数据库的示例:declare@devnointselect@devno=max(low/16777216)+1fromsysdevicesdiskinitname="auditdev",physname="%SYBASE%\data\sybaud.
dat",vdevno=@devno,size=5120以下是配置审计数据库日志的示例:declare@devnointselect@devno=max(low/16777216)+1fromsysdevicesdiskinitname="auditlogdev",physname="%SYBASE%\data\sybaudlg.
dat",第10章:审计安全性管理275vdevno=@devno,size=10245.
创建审计数据库:createdatabasesybsecurityonauditdevlogonauditlogdev6.
退出isql:exit7.
转至scripts目录:cd%SYBASE%\ASE-16_0\scripts8.
设置DSQUERY环境变量:setDSQUERY=server_name9.
使用instsecu脚本作为输入文件,以用户"sa"身份启动isql程序:isql-Usa-Ppassword-Sserver_name-iinstsecu10.
关闭SAPASE,然后将其重启.
当您完成这些步骤后,sybsecurity数据库已在自己的段中创建了一个审计表(sysaudits_01).
使用sp_addaudittable添加其它审计表.
只有在系统安全员使用审计系统过程启用审计后才能进行审计.
有关"diskinit"、"createdatabase"和"sp_addaudittable"的信息,请参见《参考手册:过程》和《参考手册:命令》.
使用auditinit安装审计使用auditinit实用程序安装审计.
安装审计系统的过程包括:配置服务器创建用于审计表的设备创建用于审计数据库事务日志的设备auditinit实用程序位于:UNIX:$SYBASE/ASE-16_0/bin/auditinitWindows:%SYBASE%\ASE-16_0\install\auditinit.
exe有关auditinit实用程序的详细信息,请参见《实用程序指南》.
使用auditinit配置服务器使用auditinit实用程序配置SAPASE服务器的审计功能.
安装审计系统的过程包括:配置服务器创建用于审计表的设备创建用于审计数据库事务日志的设备第10章:审计276AdaptiveServerEnterprise1.
执行以下操作之一:(在UNIX上)获取SYBASE.
csh或SYBASE.
sh环境变量文件.
(在Windows上)转到%SYBASE%\ASE-16_0\install目录下2.
在命令窗口中,输入auditinit.
将显示以下菜单:AUDITINIT1.
Releasedirectory:/usr/u/sybase2.
ConfigureaServerproduct3.
选择"配置一个服务器产品".
4.
在产品列表中,选择"AdaptiveServer",或在Windows上选择"SQLServer".
5.
选择"配置现有的SybaseServer".
6.
选择要配置的服务器.
7.
提供所选服务器的sa口令.
8.
按下Ctrl+a和Enter来接受sa帐户值.
通过auditinit中的菜单继续进行操作时,您可以更改显示的任何缺省值.
完成每个菜单时,按Ctrl+a接受缺省值或更改的值,然后移动到下一个菜单.
9.
从"SybaseServer的配置"屏幕中,选择"配置审计".
将显示以下菜单:CONFIGUREAUDITING1.
Configureauditing:no2.
Addadeviceforaudittable(s)3.
Addadevicefortheauditdatabasetransactionlog4.
Deleteadeviceentry5.
ChangeadeviceentryListofdevicesfortheaudittables:LogicalnamePhysicalnameSegmentnameTablenameSizeDevicefortheauditdatabasetransactionlog:LogicalnamePhysicalnameSegmentnameTablenameSize10.
从"配置审计"屏幕中,选择"配置审计".
auditinit将重新显示"配置审计"菜单,且"配置审计"的值显示为"是".
下一步要继续审计安装,您必须添加用于审计表的设备,然后添加用于审计数据库事务日志的设备.
另请参见使用auditinit创建用于审计表的设备(第278页)使用auditinit创建用于审计事务日志的设备(第280页)第10章:审计安全性管理277使用auditinit创建用于审计表的设备使用auditinit创建审计表设备.
前提条件在添加审计表设备之前,必须启动auditinit实用程序并配置服务器.
请参见"使用auditinit配置审计".
过程1.
当选择服务器进行配置时,将显示以下auditinit菜单:CONFIGUREAUDITING1.
Configureauditing:yes2.
Addadeviceforaudittable(s)3.
Addadevicefortheauditdatabasetransactionlog4.
Deleteadeviceentry5.
ChangeadeviceentryListofdevicesfortheaudittables:LogicalnamePhysicalnameSegmentnameTablenameSizeDevicefortheauditdatabasetransactionlog:LogicalnamePhysicalnameSegmentnameTablenameSize2.
从"配置审计"屏幕中,选择"为审计表添加设备".
auditinit将显示以下菜单:ADD/CHANGEANEWDEVICEFORAUDITING1.
sybsecurityphysicaldevicename:2.
Logicalnameofthedevice:3.
Sizeofthedevice(Meg):4.
Devicesizeforauditing:3.
选择"sybsecurity物理设备名".
4.
输入物理设备(文件系统或原始分区)的完整路径.
Enterthephysicalnameofthedevicetousefortheauditdatabase(defaultis""):/dev/path_to_partition5.
按回车键确认警告.
auditinit将重新显示"添加/更改新的审计设备"(Add/ChangeaNewDeviceforAuditing)菜单,该菜单将显示设备的物理名称:ADD/CHANGEANEWDEVICEFORAUDITING1.
sybsecurityphysicaldevicename:/secret1/sybase_dr/install/aud1.
dat2.
Logicalnameofthedevice:3.
Sizeofthedevice:4.
Devicesizeforauditing:第10章:审计278AdaptiveServerEnterprise6.
继续进行此菜单中剩余的各项.
注意:"设备大小"(Sizeofthedevice)的值必须等于或大于"用于审计的设备大小"(Devicesizeforauditing)的值.
"用于审计的设备大小"(Devicesizeforauditing)的值必须等于设备大小.
如果按照SAP审计准则进行操作,则无需更改"用于审计的设备大小"(Devicesizeforauditing)中显示的值.
7.
按Ctrl+a接受这些设置.
auditinit将返回到"配置审计"菜单并显示创建的设备.
CONFIGUREAUDITING1.
Configureauditing:yes2.
Addadeviceforaudittable(s)3.
Addadevicefortheauditdatabasetransactionlog4.
Deleteadeviceentry5.
ChangeadeviceentryListofdevicesfortheaudittables:LogicalnamePhysicalnameSegmentnameTablenameSize6.
Audit_01'secret1/sybase_dr/install/aud1.
dat'sysaudits_0158.
要添加多个审计设备,请重复步骤1–6.
可以添加多达八个设备.
SAP建议添加三个或更多的审计表设备.
添加一个设备后,auditinit将返回到"配置审计"菜单,并显示已创建的所有设备.
CONFIGUREAUDITING1.
Configureauditing:yes2.
Addadeviceforaudittable(s)3.
Addadevicefortheauditdatabasetransactionlog4.
Deleteadeviceentry5.
ChangeadeviceentryListofdevicesfortheaudittables:LogicalnamePhysicalnameSegmentnameTablenameSize6.
Audit_01'/secret1/sybase_dr/install/aud1.
dat'sysaudits_0157.
Audit_02'/secret1/sybase_dr/install/aud2.
dat'sysaudits_025下一步要继续审计安装,您必须添加用于审计数据库事务日志的设备.
另请参见使用auditinit创建用于审计事务日志的设备(第280页)第10章:审计安全性管理279使用auditinit创建用于审计事务日志的设备使用auditinit创建用于审计事务日志的设备.
前提条件在添加事务日志设备之前,必须启动auditinit实用程序和配置服务器,并添加用于审计表的设备.
请参见"使用auditinit配置审计".
过程1.
在创建审计表设备之后,将显示以下auditinit菜单:CONFIGUREAUDITING1.
Configureauditing:yes2.
Addadeviceforaudittable(s)3.
Addadevicefortheauditdatabasetransactionlog4.
Deleteadeviceentry5.
ChangeadeviceentryListofdevicesfortheaudittables:LogicalnamePhysicalnameSegmentnameTablenameSize6.
Audit_01'/secret1/sybase_dr/install/aud1.
dat'sysaudits_0157.
Audit_02'/secret1/sybase_dr/install/aud2.
dat'sysaudits_0252.
从"配置审计"菜单中,选择"添加用于审计数据库事务日志的设备".
auditinit将显示"添加/更改新的审计设备"菜单.
ADD/CHANGEANEWDEVICEFORAUDITING1.
sybsecurityphysicaldevicename:2.
Logicalnameofthedevice:3.
Sizeofthenewdevice(Meg):4.
Devicesizeforauditing:3.
选择"sybsecurity物理设备名".
auditinit将提示输入物理名称并提供一个缺省值(如果有):Enterthephysicalnameofthedevicetouseforthesybsecuritydatabase(defaultis''):/dev/path_to_partition其中path_to_partition为设备原始分区的路径.
4.
输入物理设备的完整路径名.
5.
按"回车"键.
auditinit将显示"添加/更改新的审计设备"菜单,并显示为设备物理名所选的值.
ADD/CHANGEANEWDEVICEFORAUDITING1.
sybsecurityphysicaldevicename:/secret1/sybase_dr/install/auditlog.
dat2.
Logicalnameofthedevice:第10章:审计280AdaptiveServerEnterprise3.
Sizeofthedevice:4.
Devicesizeforauditing:6.
继续进行此菜单中剩余的各项.
进行这些操作时,请注意以下几点:SAP建议事务日志的最小大小为2MB.
auditinit在"添加/更改新的审计设备"菜单中的"设备大小"和"用于审计的设备大小"中都显示该大小.
基于您可能想将整个设备都用于审计任务日志的假设,"用于审计的设备大小"的缺省值等于设备的大小.
仅使用设备的子集,编辑"设备大小"的值.
7.
按Ctrl+a接受"添加/更改新的审计设备"(Add/ChangeaNewDeviceforAuditing)菜单中的设置.
auditinit将返回到"配置审计"菜单并显示创建的所有设备.
CONFIGUREAUDITING1.
Configureauditing:yes2.
Addadeviceforaudittable(s)3.
Addadevicefortheauditdatabasetransactionlog4.
Deleteadeviceentry5.
ChangeadeviceentryListofdevicesfortheaudittables:LogicalnamePhysicalnameSegmentnameTablenameSize6.
Audit_01'/secret1/sybase_dr/install/aud1.
dat'sysaudits_0157.
Audit_02'/secret1/sybase_dr/install/aud2.
dat'sysaudits_0258.
auditlog/secret1/.
.
.
/auditlog.
datlogsegmentsyslogs28.
准备好执行审计配置后,请按Ctrl+a.
9.
在"SybaseServer的配置"屏幕上,再次按Ctrl+a.
您将看到:ExecutetheSybaseServerConfigurationnow10.
输入"y"(是).
auditinit将执行这些任务以安装审计.
成功完成安装后,将显示:Runningtask:installauditingcapabilities.
DoneAuditingcapabilityinstalled.
Tasksucceeded:installauditingcapabilities.
Configurationcompletedsuccessfully.
Presstocontinue.
另请参见使用auditinit配置服务器(第276页)使用auditinit创建用于审计表的设备(第278页)第10章:审计安全性管理281启用或禁用审计安装审计后,只有在系统安全员使用sp_configure启用审计后才能进行审计.
将sp_configure与auditing配置参数一起使用以启用或禁用审计.
语法为:sp_configure"auditing",[0|1]1–启用审计.
0–禁用审计.
例如,要启用审计,请输入:sp_configure"auditing",1注意:当您启用或禁用审计时,SAPASE会自动生成审计记录.
重新启动审计如果审计进程因出现错误而强制终止,可手动重新启动sp_audit.
输入:sp_auditrestart只要当前没有运行审计,即可重新启动审计进程,但必须用sp_configure"auditing"1启用审计进程.
配置审计系统使用sp_configure和系统过程配置审计系统.
使用sp_configure审计参数管理审计进程:auditing-启用或禁用整个SAPASE服务器的审计.
此参数在执行sp_configure后立即生效.
只有在启用此参数后,审计才会发生.
auditqueuesize-确定审计队列的大小.
由于此参数会影响内存分配,所以需重新启动SAPASE服务器后才会生效.
suspendauditwhendevicefull-控制在审计设备充满时审计进程的行为.
此参数在执行sp_configure后立即生效.
currentaudittable-设置当前审计表.
此参数在执行sp_configure后立即生效.
可以使用下面这些系统过程来管理审计进程:sp_audit-启用和禁用审计选项.
这是建立待审计事件所需的唯一系统过程.
sp_displayaudit-显示活动的审计选项.
sp_addauditrecord-将用户定义的审计记录(注释)添加到审计追踪中.
只有在系统安全员使用sp_audit启用即席审计后,用户才能添加这些记录.
第10章:审计282AdaptiveServerEnterprise在源代码控制系统中管理已部署资源SAP建议:所有由用户创建的与SAPASE部署相关联的源文件应由第三方资源控制系统(SCCS、RCS、Clearcase、Perforce等)进行管理.
进而建议自动部署这些文件,可使用物料清单和脚本,以可靠和可重复的方式安装这些文件.
建议在资源控制系统内维护脚本资源本身.
审计配置更改SAP还建议对SAPASE配置的更改进行审计.
有两种方式可以启用对sp_configure所进行的配置更改的审计:使用sp_configure对象上的审计选项exec_procedure,以直接审计sp_configure,使用审计选项security,它包含由sp_configure以及其它过程所进行的配置更改.
要捕获对配置文件直接进行的配置更改,请使用操作系统提供的针对配置文件的文件系统审计.
按照操作系统供应商的建议启用配置文件审计.
例如:针对Linux2.
6内核,使用auditd(8)守护程序和相关实用程序auditctl、ausearch和aureport.
针对AIX,在/etc/security/audit/config中对审计系统进行配置,并使用审计start命令启动审计系统.
AIX系统可参考IBM红皮书"AccountingandAuditingonAIX5L".
针对Windows,在"安全性"(Security)选项卡中设置属性以启用对文件和文件夹的审计.
例如,右键单击文件或文件夹,然后选择属性(Properties)>安全性(Security)>高级(Advanced)>审计(Auditing)并按照对话框中的提示进行操作.
有关Windows的详细信息,请访问Microsoft支持站点.
将SAPASE与操作系统的审计记录相关联链接SAPASE审计记录和操作系统记录的最简便方法是使SAPASE的登录名与操作系统的登录名相同.
或者,系统安全员可将用户的操作系统登录名映射为其SAPASE登录名.
然而,这种方法要求进行即时维护,因为新用户的登录名必须手动记录.
设置全局审计选项安装审计后,可使用sp_audit设置审计选项.
sp_audit的语法为:sp_auditoption,login_name,object_name[,setting]如果在无参数情况下运行sp_audit,它将提供选项的完整列表.
有关sp_audit的详细信息,请参见《参考手册:过程》.
第10章:审计安全性管理283注意:为服务器激活审计之前,不会进行审计.
另请参见启用或禁用审计(第282页)审计选项指定审计选项的值和要求.
能为sp_audit的login_name和object_name参数指定的值,取决于指定的审计选项类型:全局选项应用于影响整个服务器的命令,例如启动服务器、磁盘操作命令和允许用户定义即席审计记录的命令.
全局事件的选项设置存储在sybsecurity.
.
sysauditoptions系统表中.
特定于数据库的选项应用于一个数据库.
例如,更改数据库;将数据批量复制(bcpin)到数据库中;授予或撤消对数据库中对象的访问权;以及在数据库中创建对象等.
特定于数据库的事件的选项设置存储在master.
.
sysdatabases系统表中.
特定于对象的选项应用于一个对象.
如选择、插入、更新或删除特定表或视图的行以及执行特定触发器或过程.
特定于对象的事件的选项设置存储在相应数据库的sysobjects系统表中.
特定于用户的选项适用于特定的用户或系统角色.
例如,特定用户对任何表或视图的访问,或当特定系统角色(例如sa_role)为活动状态时执行的所有操作.
各个用户的选项设置存储在master.
.
syslogins中.
系统角色的设置存储在master.
.
sysauditoptions中.
特定于角色的选项适用于特定的用户、组或系统角色,提供精细的与安全性相关的审计.
"角色"审计选项对所有与角色相关的命令进行审计,审计选项create、alter和drop用于审计角色定义命令,而grant和revoke用于审计向主体授予角色.
为需要对象名参数的审计选项指定了master数据库.
审计选项、要求和示例表显示:option的有效值和每个选项的类型(全局、特定于数据库、特定于对象或特定于用户)每个选项的login_name和object_name参数的有效值您设置审计选项时所在的数据库您设置选项时被审计的命令或权限每个选项的一个示例所有选项的缺省值都是"off".
第10章:审计284AdaptiveServerEnterprise表33.
审计选项、要求和示例选项(选项类型)login_nameobject_name设置选项时应在的数据库将被审计的命令或权限adhoc(特定于用户)allall任何允许用户使用sp_ad-dauditrecord此示例启用用户定义的即席审计记录:sp_audit"adhoc","all","all","on"all(特定于用户)一个登录名或角色all任何特定用户或具有特殊角色的用户执行的所有操作此示例为sa_role处于活动状态的所有操作启用审计:sp_audit"all","sa_role","all","on"alter(特定于数据库)all将被审计的数据库任何alterdatabase、alterrole、altertable此示例为master数据库中的所有alterdatabase和altertable执行启用审计:sp_audit@option="alter",@login_name="all",@object_name="master",@setting="on"bcp(特定于数据库)all将被审计的数据库任何bcpin此示例返回pubs2数据库中bcp审计的状态:sp_audit"bcp","all","pubs2"如果没有为setting指定值,SAPASE将返回指定选项的审计状态)bind(特定于数据库)all将被审计的数据库任何sp_bindefault、sp_bindmsg、sp_bindrule此示例为planning数据库禁用绑定审计:sp_audit"bind","all","planning","off"cmdtext(特定于用户)要审计的用户的登录名all任何用户输入的SQL文本.
(不反映被审计的文本是否通过了权限检查.
eventmod的值通常为1.
)此示例为数据库所有者禁用文本审计:sp_audit"cmdtext","sa","all","off"第10章:审计安全性管理285选项(选项类型)login_nameobject_name设置选项时应在的数据库将被审计的命令或权限create(特定于数据库)all将被审计的数据库任何createdatabase、createtable、createrole、createprocedure、createtrigger、createrule、createdefault、sp_addmessage、createview、createindex、createfunction注意:为object_name指定master,以对createdatabase进行审计.
这样,还会对master中其它对象的创建进行审计.
此示例启用对planning数据库中成功对象创建操作的审计:sp_audit"create","all","planning","pass"createdatabase的当前审计状态不会受影响,因为没有指定master数据库.
dbaccess(特定于数据库)all将被审计的数据库任何另一数据库对该数据库的任何访问此示例审计对project数据库的所有外部访问:sp_audit"dbaccess","all","project","on"dbcc(全局)allall任何需要权限的所有dbcc命令此示例审计dbcc命令的所有执行:sp_audit"dbcc","all","all","on"delete(特定于对象)all要审计的表或视图的名称,或者defaultview或defaulttable该表或视图的数据库(除tempdb之外)从表中删除数据的delete命令、从视图中删除数据的delete命令此示例审计当前数据库中所有未来表的所有删除操作:sp_audit"delete","all","defaulttable","on"disk(全局)allall任何diskinit、diskrefit、diskreinit、diskmirror、diskunmirror、diskremirror、diskresize第10章:审计286AdaptiveServerEnterprise选项(选项类型)login_nameobject_name设置选项时应在的数据库将被审计的命令或权限此示例审计服务器的所有磁盘操作:sp_audit"disk","all","all","on"drop(特定于数据库)all将被审计的数据库任何dropdatabase、droptable、droprole、dropprocedure、dropindex、droptrigger、droprule、dropdefault、sp_dropmessage、dropview、dropfunction此示例审计financial数据库中所有未通过权限检查的删除命令:sp_audit"drop","all","financial","fail"dump(特定于数据库)all将被审计的数据库任何dumpdatabase、dumptransaction此示例审计pubs2数据库中的转储命令:sp_audit"dump","all","pubs2","on"encryption_key(特定于数据库)all将被审计的数据库任何alterencryptionkeycreateencryptionkeydropencryptionkeysp_encryption此示例在pubs2数据库中审计所有上述命令:sp_audit"encryption_key","all","pubs2","on"errors(全局)allall任何致命错误、非致命错误此示例审计整个服务器上的错误:sp_audit"errors","all","all","on"errorlogallall任何sp_errorlog或errorlog_admin函数此示例对尝试"更改日志"以转移到新SAPASE错误日志文件的操作进行审计:sp_audit"errorlog","all","all","on"第10章:审计安全性管理287选项(选项类型)login_nameobject_name设置选项时应在的数据库将被审计的命令或权限exec_procedure(特定于对象)all要审计的过程的名称或defaultproce-dure该过程的数据库(除tempdb之外)execute此示例禁用对当前数据库中新过程的自动审计:sp_audit"exec_procedure","all","defaultprocedure","off"exec_trigger(特定于对象)all要审计的触发器的名称或缺省触发器该触发器的数据库(除tempdb之外)任何引发触发器的命令此示例对当前数据库中所有trig_fix_plan触发器的失败执行进行审计:sp_audit"exec_trigger","all","trig_fix_plan","fail"func_dbaccess(特定于数据库)all正在审计的数据库的名称任何使用以下函数对数据库进行的访问:curunre-served_pgs、db_name、db_id、lct_admin、setdbrepstat、setrepstatus、setrepdefmode、is_repagent_enabled、rep_agent_config、rep_agent_admin此示例对通过内置函数对strategy数据库的访问进行审计:sp_audit@option="func_dbaccess",@login_name="all",@object_name="strategy",@setting="on"func_obj_access(特定于对象)all任何在sysobjects中具有条目的对象的名称任何使用以下函数对对象进行的访问:schema_inc、col_length、col_name、data_pgs、index_col、object_id、object_name、reserved_pgs、rowcnt、used_pgs、has_subquery第10章:审计288AdaptiveServerEnterprise选项(选项类型)login_nameobject_name设置选项时应在的数据库将被审计的命令或权限此示例对通过内置函数对customer表的访问进行审计:sp_audit@option="func_obj_access",@login_name="all",@object_name="customer",@setting="on"grant(特定于数据库)all要审计的数据库的名称任何grant此示例审计planning数据库中的所有授权:sp_audit@option="grant",@login_name="all",@object_name="planning",@setting="on"insert(特定于对象)all要插入行的视图或表的名称,或者defaultview或defaulttable该对象的数据库(除tempdb之外)将数据插入到表中的insert命令、将数据插入到视图中的insert命令此示例对向当前数据库中的dpt_101_view视图插入数据的所有插入命令进行审计:sp_audit"insert","all","dpt_101_view","on"install(特定于数据库)all将被审计的数据库任何installjava此示例审计数据库planning中Java类的安装:sp_audit"install","all","planning","on"load(特定于数据库)all将被审计的数据库任何loaddatabase、loadtransaction此示例对projects_db数据库中所有数据库和事务装载的失败执行进行审计:sp_audit"load","all","projects_db","fail"login(全局)allall任何任何到SAPASE的登录此示例对所有到服务器的失败登录尝试进行审计:sp_audit"login","all","all","fail"login_locked(全局)allall任何此示例表明登录由于超过配置的失败登录尝试次数而被锁定:sp_audit"login_locked","all","all","on"第10章:审计安全性管理289选项(选项类型)login_nameobject_name设置选项时应在的数据库将被审计的命令或权限logoutallall任何任何自SAPASE的注销此示例禁用对服务器注销操作的审计:sp_audit"logout","all","all","off"mount(全局)allall任何mountdatabase此示例审计发出的所有mountdatabase命令:sp_audit"mount","all","all","on"passwordallall任何全局口令和登录策略选项的设置此示例对口令启用审计:sp_audit"password","all","all","on"quiesce(全局)allall任何quiescedatabase此示例对quiescedatabase命令启用审计:sp_audit"quiesce","all","all","on"reference(特定于对象)all要插入行的视图或表的名称,或者defaultview或defaulttable任何createtable、altertable此示例禁用对titles表引用创建的审计:sp_audit"reference","all","titles","off"remove(特定于数据库)allall任何审计Java类的删除此示例审计数据库planning中Java类的删除:sp_audit"remove","all","planning","on"revoke(特定于数据库)all将被审计的数据库任何revoke此示例禁用对payments_db数据库中revoke执行的审计:sp_audit"revoke","all","payments_db","off"rpc(全局)allall任何远程过程调用(内部或外部)第10章:审计290AdaptiveServerEnterprise选项(选项类型)login_nameobject_name设置选项时应在的数据库将被审计的命令或权限此示例审计对服务器外部或内部进行的所有远程过程调用:sp_audit"rpc","all","all","on"security(全局)allall任何全服务器范围内与安全性相关的事件.
此示例对服务器中全服务器范围内的与安全性相关的事件进行审计:sp_audit"security","all","all","on"select(特定于对象)all要插入行的视图或表的名称,或者defaultview或defaulttable该对象的数据库(除tempdb之外)从表中选择数据的select命令、从视图中选择数据的select命令此示例对从当前数据库中的customer表选择数据但失败的所有选择命令进行审计:sp_audit"select","all","customer","fail"setuser(特定于数据库)allall任何setuser此示例审计projdb数据库中setuser的所有执行:sp_audit"setuser","all","projdb","on"sproc_authallall任何对在系统存储过程内部执行的授权检查进行审计此示例启用sproc_auth:sp_audit'sproc_auth','all','all','on'table_access(特定于用户)要审计的用户的登录名.
all任何表中的select、delete、update或insert访问此示例审计由登录名"smithson"执行的所有表访问:sp_audit"table_access","smithson","all","on"transfer_table(全局)allall任何全服务器范围内的选项.
不显示在sysauditoptions中.
此示例对服务器中全服务器范围内的与传输相关的事件进行审计:sp_audit"transfer_table","tdb1.
table1","all","on"truncateall将被审计的数据库任何truncatetable第10章:审计安全性管理291选项(选项类型)login_nameobject_name设置选项时应在的数据库将被审计的命令或权限(特定于数据库)此示例审计customer数据库中的所有表截断:sp_audit"truncate","all","customer","on"unbind(特定于数据库)all将被审计的数据库任何sp_unbindefault、sp_unbindrule、sp_unbindmsg此示例对master数据库中所有失败的解除绑定尝试进行审计:sp_audit"unbind","all","master","fail"unmount(全局)allall任何unmountdatabase此示例对使用任何数据库卸载或创建清单文件的所有尝试进行审计:sp_audit"unmount","all","all","on"update(特定于对象)all指定要审计的对象的名称,defaulttable或defaultview该对象的数据库(除tempdb之外)对表执行的update命令、对视图执行的update命令此示例对用户更新当前数据库中projects表的所有尝试进行审计:sp_audit"update","all","projects","on"view_access(特定于用户)要审计的用户的登录名all任何对视图执行的select、delete、insert或update此示例禁用用户"joe"的视图审计:sp_audit"view_access","joe","all","off"设置审计选项的示例可用审计选项的示例本示例显示了如何对company_operations数据库中projects表和该数据库中所有新表上的所有失败删除进行审计.
可对projects表使用特定于对象的delete选项,对数据库中的所有未来表使用defaulttable.
在执行sp_audit以设置特定于对象的审计选项之前,您必须在对象的数据库中:sp_audit"security","all","all","fail"对于此示例,应执行:usecompany_operationsgosp_audit"delete","all","projects","fail"第10章:审计292AdaptiveServerEnterprisegosp_audit"delete","all","defaulttable","fail"go角色特定审计示例1为角色变更启用审计:sp_audit"alter","all","master","pass"示例2为成功的角色创建启用审计:sp_audit"alter","all","master","on"示例3此示例禁用删除角色的审计:sp_audit"drop","all","master","off"示例4禁用授予角色的审计:sp_audit"grant","all","master","off"使用grant或role审计选项执行审计,生成AUD_EVT_UDR_CMD(85)事件审计记录.
示例5启用撤消规则的审计:sp_audit"revoke","all","master","on"使用revoke或role审计选项执行审计,生成AUD_EVT_UDR_CMD(85)事件审计记录.
隐藏系统存储过程和命令口令参数如果配置并启用了审计,且设置了sp_audit选项'cmdtext',则审计日志中包含的审计记录里的系统存储过程和命令口令参数就会被替换为固定长度的星号串.
例如,当启用审计并设置sp_auditcmdtext后,执行以下命令:alterloginjohndwithpasswordoldpasswdmodifypassword'newpasswd'此命令将导致类似如下的输出:alterloginjohndwithpassword******modifypassword'******'审计启用时,存储过程sp_addlogin的示例:sp_addlogintest2,secretgo第10章:审计安全性管理293selectevent,extrainfofromsybsecurity.
.
sysaudits_01whereevent=92go输出中的审计记录结果:eventextrainfo92;sp_addlogintest2,******这样做可以保护口令不会被可以访问审计日志的其他人看到.
确定当前审计设置若要确定给定选项的当前审计设置,请使用sp_displayaudit.
语法为:sp_displayaudit[procedure|object|login|database|global|default_object|default_procedure[,name]]有关详细信息,请参见《参考手册:过程》中的"sp_displayaudit".
审计grant和revoke命令审计grant和revoke命令时,命令文本将写入审计记录extrainfo列的位置2.
过滤除下述内容以外的全部注释:"/*auditcomment*/"或带中括号,例如"[/*auditcomment*/]".
将过滤多余空格.
如果grant或revoke命令在存储过程内部执行,则改为写入被授予者和已授予权限.
以下是grantrolesso_roletouser1审计记录extrainfo列的一个示例:sa_rolesso_roleoper_rolesybase_ts_rolemon_role;grantrolesso_roletouser1;sa/ase;以下是revokerolesso_rolefromuser1审计记录extrainfo列的一个示例:sa_rolesso_roleoper_rolesybase_ts_rolemon_role;revokerolesso_rolefromuser1;sa/ase;另请参见读取extrainfo列(第313页)审计DML语句当启用DML审计选项(包括table_access和view_access)时,SAPASE支持全文本DML审计,在屏蔽敏感参数的情况下打印参数名和参数值.
记录以下命令的全文本审计信息:selectinsert第10章:审计294AdaptiveServerEnterprisedeleteupdateselectinto例如,如果设置审计:sp_audit"update","all","t1","on"并更新表:declare@val1intselect@val1=1updatet1setc1=@val1当从sysaudits_01中选择审计事件时,SAPASE将显示update语句的全文本(以粗体显示):selectevent,extrainfofromsysaudits_01whereevent=70eventextrainfo70sso_roleoper_rolesybase_ts_rolemon_role;updatet1setc1=@val1;;;@val1=1;sa/ase;SAPASE支持对存储过程、预准备语句和即席批处理内发出的DML命令进行全文本DML审计.
它还对启用语句高速缓存时的DML以及与游标一起使用的DML进行全文本输出.
全文本DML审计不输出动态参数的名称.
如果创建的存储过程是从已启用审计的表中选择的,则在执行存储过程(下方示例中以粗体显示)时,审计表将包含select语句的全文本:createprocp1@val1int,@val2intasselect*fromt1wherec1=@val1andc2=@val2gosp_audit'select','all','t1','on'goexecp110,20goselectevent,extrainfofromsysaudits_01whereevent=62eventextrainfo62sa_rolesso_roleoper_rolesybase_ts_rolemon_role;select*fromt1wherec1=@val1andc2=@val2;;;@val1=10,@val2=20;;sa/ase;NULL在select和insert审计选项下对selectinto进行审计.
例如:sp_audit"select","all","t1","on"gosp_audit"insert","all","defaulttable","on"goselect*intot2fromt1wherec1=1go第10章:审计安全性管理295usesybsecuritygoeventextrainfo62sa_rolesso_roleoper_rolesybase_ts_rolemon_role;select*intot2fromt1;;sa/ase;41sa_rolesso_roleoper_rolesybase_ts_rolemon_role;select*intot2fromt1;;sa/ase;用于将数据插入或更新到加密列的参数发生混淆.
例如,加密表t1中的第二列:declare@nrchar(30)declare@nr1intdeclare@nr2char(30)select@nr="aaa"select@nr1=100select@nr2="bbb"insertt1values(@nr,@nr1,@nr2)goeventextrainfo41sa_rolesso_roleoper_rolesybase_ts_rolemon_role;insertt1values(@nr,@nr1,@nr2);;;@nr=aaa,@nr1nr2=bbb;;sa/ase;全文本DML审计不输出text、unitext和image数据类型的参数值.
而是输出字符串:"Textdata"、"Unitextdata"和"Imagedata",它们分别位于结果集中:(以粗体显示):eventextrainfo41sa_rolesso_roleoper_rolesybase_ts_rolemon_role;insertmytextvalues(10,@a);;;@a=Textdata;;sa/ase;注意:SAP建议您调整审计日志的空间分配以符合全文本DML审计的额外空间要求.
对于应用谓词特权的DML语句,PredicatesApplied:将写入审计记录的extrainfo列.
以下是select语句审计记录的一个示例,其中已将两项谓词特权授予表t1上的user1:selectevent,extrainfofromsysaudits_01whereevent=70eventextrainfo70sso_roleoper_rolesybase_ts_rolemon_role;PredicatesApplied:t1_qx8WwJltv#Co,t1_eb#rxg5pnV76;;user1/ase;第10章:审计296AdaptiveServerEnterprise审计登录和登录配置文件命令审计登录和登录配置文件命令时,全文本将放置在extrainfo列中,并将敏感参数设成掩码.
以下示例是各个语句的审计记录,其中涉及登录和登录配置文件.
createlogin语句:createlogintest1withpasswdjoedefaultdatabasemastergoselectevent,extrainfofromsybsecurity.
.
sysaudits_01whereevent=103goeventextrainfo103sa_rolesso_roleoper_rolesybase_ts_role;createlogintest1withpasswd******defaultdatabasemaster;sa/ase;createlogin语句包含varchar@pass的declare语句:declare@passvarchar(30)select@pass="greatSecret"createlogintest3withpasswd@passdefaultdatabasemastergoselectevent,extrainfofromsybsecurity.
.
sysaudits_01whereevent=103goeventextrainfo103sa_rolesso_roleoper_rolesybase_ts_role;createlogintest3withpasswd@passdefaultdatabasemaster;sa/ase;具有加密口令的createlogin语句:createlogintest4withencryptedpasswd0xc00749c449a5dd4922a59b025c605c80efe26a9235710e18b4eedb31b32edae356d57a4d86a57388f73cdefaultdatabasemastergoselectevent,extrainfofromsybsecurity.
.
sysaudits_01whereevent=103goeventextrainfo103sa_rolesso_roleoper_rolesybase_ts_role;createlogintest4withencryptedpasswd******defaultdatabasemaster;sa/ase;用于修改口令的alterlogin语句:第10章:审计安全性管理297alterlogintest1withpasswdjoe123modifypasswdmyPass123goselectevent,extrainfofromsybsecurity.
.
sysaudits_01whereevent=138goeventextrainfo138;alterlogintest1withpasswd******modifypasswdtest1/ase;createloginprofilejoe_lp:createloginprofilejoe_lpgoalterloginprofilejoe_lpmodifydefaultdatabase"sybsystemprocs"godroploginprofilejoe_lpselectevent,extrainfofromsybsecurity.
.
sysaudits_01whereeventin(137,140,141)goeventextrainfo138;sa_rolesso_roleoper_rolesybase_ts_role;createloginprofilevivekk_lp;sa/ase;140;sa_rolesso_roleoper_rolesybase_ts_role;alterloginprofilevivekk_lpmodifydefaultdatabase"sybsystemprocs"sa/ase;141;sa_rolesso_roleoper_rolesybase_ts_role;droploginprofilevivekk_lp;sa/ase;另请参见读取extrainfo列(第313页)审计存储过程可将sproc_auth审计选项用于存储过程,以对在系统存储过程内部执行的授权检查启用审计审计存储过程执行时,如果该过程创建时使用了executeasowner或executeascaller,则信息将写入审计记录extrainfo部分的位置2.
在extrainfo部分的第5部分中,用户名将作为曾适用的所有者或调用者写入.
以下是数据库所有者所有的、由用户Joe执行的extrainfo列的示例,其创建时使用了executeascaller:;EXECUTEASCALLER;;;procedurecaller=joe;;;以下是Billy所拥有过程的extrainfo列的一个示例,其创建时使用了executeasowner:;EXECUTEASOWNER;;;procedureowner=billy;;;第10章:审计298AdaptiveServerEnterprise审计存储过程授权检查审计选项sproc_auth为在系统存储过程内执行的授权检查启用审计.
细化权限事件Enabled146Disabled80启用security审计选项,或启用sproc_auth审计选项时,将对审计事件80进行审计.
仅当启用sproc_auth选项时,才会对审计事件146进行审计.
要启用sproc_auth:sp_audit'sproc_auth','all','all','on'修改审计系统将sybsecurity数据库移动到另一个设备上,或更改审计系统中的设备.
移动sybsecurity审计数据库如果当前您将sybsecurity数据库与master保存在同一设备上,那么您可以将sybsecurity移动到另一设备上,同时保存或不保存现有的全局审计设置.
注意:sybsecurity数据库应位于自己的设备上,与master数据库分开.
如果有多个审计表,将每个表放在各自的设备上.
把每个表放在指向独立设备的独立的段上也会有所帮助.
移动sybsecurity而不保存全局审计设置在master所在的设备上移动sybsecurity数据库,而不保存现有全局审计设置.
注意:sybsecurity数据库应放置在自己的设备上,与master数据库分开.
如果有多个审计表,将每个表放在各自的设备上.
把每个表放在指向独立设备的独立的段上也会有所帮助.
这些步骤包括删除sybsecurity数据库,该步骤将销毁所有审计记录以及sybsecurity中以前记录的全局审计设置.
在删除sybsecurity数据库之前,请确保使用备份或通过存档审计表将现有记录存档,以避免丢失保留在sybsecurity表中的任何历史数据.
1.
执行以下命令,从syslogins系统表中删除所有与登录相关的信息:sp_audit"all","all","all","off"2.
删除sybsecurity数据库.
3.
使用平台配置文档或InstallingAuditingwithinstallsecurity中描述的安装过程重新安装sybsecurity.
第10章:审计安全性管理2994.
安装过程中,将sybsecurity数据库放置在独立于主设备的一个或多个设备上.
移动sybsecurity并保存全局审计设置在master所在的设备上移动sybsecurity数据库并保存现有全局审计设置.
注意:sybsecurity数据库应放置在自己的设备上,与master数据库分开.
如果有多个审计表,将每个表放在各自的设备上.
把每个表放在指向独立设备的独立的段上也会有所帮助.
1.
转储sybsecurity数据库:dumpdatabasesybsecurityto"/remote/sec_file"2.
删除sybsecurity数据库:dropdatabasesybsecurity3.
初始化第一个要在其中放置sybsecurity数据库的设备:diskinitname="auditdev",physname="/dev/dsk/c2d0s4",size="10M"4.
初始化要在其中放置sybsecurity日志的设备:diskinitname="auditlogdev",physname="/dev/dsk/c2d0s5",size="2M"5.
创建新的sybsecurity数据库:createdatabasesybsecurityonauditdevlogonauditlogdev6.
将旧的sybsecurity数据库中的内容装载到新数据库中.
将保留全局审计设置:loaddatabasesybsecurityfrom"/remote/sec_file"7.
运行onlinedatabase,该命令将在必要时升级sysaudits和sysauditoptions:onlinedatabasesybsecurity8.
使用所用平台的配置文档装载审计系统过程.
使用auditinit删除设备条目使用auditinit删除设备条目.
1.
(在UNIX上)获取SYBASE.
csh或SYBASE.
sh环境变量文件.
2.
(在Windows上)转到%SYBASE%\ASE-16_0\install目录下3.
在命令窗口中,输入auditinit.
将显示以下菜单:第10章:审计300AdaptiveServerEnterpriseAUDITINIT1.
Releasedirectory:/usr/u/sybase2.
ConfigureaServerproduct4.
选择"配置一个服务器产品".
5.
在产品列表中,选择"AdaptiveServer",或在Windows上选择"SQLServer".
6.
选择"配置现有的SybaseServer".
7.
选择要配置的服务器.
8.
提供所选服务器的sa口令.
9.
按下Ctrl+a和Enter来接受sa帐户值.
通过auditinit中的菜单继续进行操作时,您可以更改显示的任何缺省值.
完成每个菜单时,按Ctrl+a接受缺省值或更改的值,然后移动到下一个菜单.
10.
从"SybaseServer的配置"屏幕中,选择"配置审计".
将显示以下菜单:CONFIGUREAUDITING1.
Configureauditing:yes2.
Addadeviceforaudittable(s)3.
Addadevicefortheauditdatabasetransactionlog4.
Deleteadeviceentry5.
ChangeadeviceentryListofdevicesfortheaudittables:LogicalnamePhysicalnameSegmentnameTablenameSize11.
从"配置审计"菜单中选择"删除设备项".
12.
输入要删除的设备的编号.
13.
按回车键.
使用auditinit更改设备条目使用auditinit更改设备条目.
1.
(在UNIX上)获取SYBASE.
csh或SYBASE.
sh环境变量文件.
2.
(在Windows上)转到%SYBASE%\ASE-16_0\install目录下3.
在命令窗口中,输入auditinit.
将显示以下菜单:AUDITINIT1.
Releasedirectory:/usr/u/sybase2.
ConfigureaServerproduct4.
选择"配置一个服务器产品".
5.
在产品列表中,选择"AdaptiveServer",或在Windows上选择"SQLServer".
第10章:审计安全性管理3016.
选择"配置现有的SybaseServer".
7.
选择要配置的服务器.
8.
提供所选服务器的sa口令.
9.
按下Ctrl+a和Enter来接受sa帐户值.
通过auditinit中的菜单继续进行操作时,您可以更改显示的任何缺省值.
完成每个菜单时,按Ctrl+a接受缺省值或更改的值,然后移动到下一个菜单.
10.
从"SybaseServer的配置"屏幕中,选择"配置审计".
将显示以下菜单:CONFIGUREAUDITING1.
Configureauditing:yes2.
Addadeviceforaudittable(s)3.
Addadevicefortheauditdatabasetransactionlog4.
Deleteadeviceentry5.
ChangeadeviceentryListofdevicesfortheaudittables:LogicalnamePhysicalnameSegmentnameTablenameSize11.
从"配置审计"菜单中选择"改变设备项".
12.
输入要更改的设备的编号.
auditinit将显示"添加/更改新的审计设备"(Add/ChangeaNewDeviceforAuditing)菜单,并显示有关所选设备的信息:ADD/CHANGEANEWDEVICEFORAUDITING1.
sybsecurityphysicaldevicename:/secret1/sybase_dr/install/audlog2.
Logicalnameofthedevice:aud.
log3.
sizeofthenewdevice(Meg):54.
Devicesizeforauditing:513.
选择要更改的每个剩余条目.
14.
按Ctrl+A保存新的条目.
审计追踪管理以下常规步骤描述如何有效管理审计追踪.
确保审计安装后有两个或多个表,且每个表都在单独的设备上.
如果不是,考虑添加审计表和设备.
编写一个阈值过程,并将其附加到每个审计表段.
为审计队列大小设置配置参数,并指明一旦当前审计表充满时应采取的相应措施.
查询审计追踪和短句子向审计追踪中添加用户指定的记录第10章:审计302AdaptiveServerEnterprise在sybsecurity中创建多个sysaudits表SAP强烈建议您不要对生产系统使用单个设备进行审计.
如果仅使用一个审计表,则在存档审计数据和截断审计表时会消耗一定时间,在此期间将丢失写入的审计记录.
仅使用一个审计表时没有方法能避免这种情况发生.
1.
初始化要在其中放置其它表的设备:diskinitname="auditdev2",physname="/dev/dsk/c2d0s6",size="10M"2.
将sybsecurity数据库扩展到步骤1中初始化的设备上:alterdatabasesybsecurityonauditdev2="2M"3.
运行sp_addaudittable,在步骤1中初始化的设备上创建下一个sysaudits表:sp_addaudittableauditdev24.
对每个sysaudits表重复步骤1–3.
设置阈值过程启用审计之前,建立一个阈值过程,以在当前表充满时自动切换审计表.
注意:以下说明假设您已安装的审计具有两个或更多个表,且每个表都位于单独的设备上.
如果仅有一个设备用于审计表,请参见"单表审计".
用于审计设备段的阈值过程应该:使用sp_configure设置currentaudittable配置参数,使下一个空审计表成为当前表.
使用insert.
.
.
select命令存档接近全满的审计表.
更改当前审计表currentaudittable配置参数建立SAPASE向其中写入审计行的表.
作为系统安全员,您可以使用sp_configure按照以下语法更改当前审计表,其中n是一个整数,用以确定新的当前审计表:sp_configure"currentaudittable",n[,"withtruncate"]n的有效值为:1表示sysaudits_01,2表示sysaudits_02,依此类推.
0将告知服务器自动将下一个表设置为当前审计表.
例如,如果安装中有三个审计表,sysaudits_01、sysaudits_02和sysaudits_03,则SAPASE会将当前审计表设置为:2,如果当前审计表是sysaudits_013,如果当前审计表是sysaudits_02第10章:审计安全性管理3031,如果当前审计表是sysaudits_03withtruncate选项指定应截断尚不为空的新表.
如果未指定此选项且新表不为空,则sp_configure将失败.
注意:如果截断了当前的审计表,而且您没有将数据存档,则该表中的审计记录将丢失.
在使用withtruncate选项之前,请将审计数据存档.
要执行sp_configure以更改当前的审计表,sso_role必须为活动状态.
可以编写一个阈值过程来自动更改当前审计表.
存档审计表可将insert与select一起使用,将审计数据复制到一个与sybsecurity中的审计表具有相同列的现有表中.
1.
在不同于存放sybsecurity中审计表的另一设备上创建存档数据库.
2.
创建一个存档表,表中的列应与sybsecurity审计表中的列相同.
如果此类表尚不存在,则可使用selectinto,通过在where子句中设置一个false条件来创建空表.
例如:useaud_dbgoselect*intoaudit_datafromsybsecurity.
dbo.
sysaudits_01where1=2where条件始终为false,因此将创建sysaudits_01的空副本.
存档数据库中的selectinto/bulkcopy数据库选项必须设置为开启(使用sp_dboption)后,才可以使用selectinto.
在使用sp_configure审计表后,阈值过程可以使用insert和select将数据复制到存档数据库的存档表中.
此过程可以执行类似如下的命令:insertaud_db.
sso_user.
audit_dataselect*fromsybsecurity.
dbo.
sysaudits_01审计段的阈值过程示例此示例阈值过程假定已为审计配置了三个表.
declare@audit_table_numberint/***Selectthevalueofthecurrentaudittable*/select@audit_table_number=scc.
valuefrommaster.
dbo.
syscurconfigsscc,master.
dbo.
sysconfiguresscwheresc.
config=scc.
configandsc.
name="currentaudittable"/***Setthenextaudittabletobecurrent.
**Whenthenextaudittableisspecifiedas0,**thevalueisautomaticallysettothenextone.
*/第10章:审计304AdaptiveServerEnterpriseexecsp_configure"currentaudittable",0,"withtruncate"/***Copytheauditrecordsfromtheaudittable**thatbecamefullintoanothertable.
*/if@audit_table_number=1begininsertaud_db.
sso_user.
sysauditsselect*fromsysaudits_01truncatetablesysaudits_01endelseif@audit_table_number=2begininsertaud_db.
sso_user.
sysauditsselect*fromsysaudits_02truncatetablesysaudits_02endreturn(0)将阈值过程附加到每个审计段使用sp_addthreshold将阈值过程附加到每个审计表段.
执行sp_addthreshold之前:确定为安装配置的审计表数目及其设备段名称具有对阈值过程中所有命令执行sp_addthreshold所需的权限和角色警告!
sp_addthreshold和sp_modifythreshold将进行检查,以确保只有直接被授予sa_role的用户才能添加或修改阈值.
添加或修改阈值时,所有活动的系统定义角色都将作为有效角色插入到用户所登录的systhresholds表中.
然而,触发阈值过程时,仅激活直接授予的角色.
审计表及其审计段安装审计时,auditinit显示每个审计表及其段的名称.
sysaudits_01的段名为"aud_seg1",sysaudits_02的段名为"aud_seg2",依此类推.
如果使用sybsecurity作为当前数据库来执行sp_helpsegment,则可以找到有关sybsecurity数据库中的段的信息.
查明用户安装中的审计表数目的一种方法是执行以下SQL命令:usesybsecuritygoselectcount(*)fromsysobjectswherenamelike"sysaudit%"go通过执行以下SQL命令,获取有关审计表和sybsecurity数据库的更多信息:sp_helpdbsybsecuritygousesybsecuritygosp_helpsysaudits_01go第10章:审计安全性管理305sp_helpsysaudits_02go.
.
.
所需角色和权限要执行sp_addthreshold,您必须是数据库所有者或系统管理员.
系统安全员应是sybsecurity数据库的所有者,因此应该能够执行sp_addthreshold.
除了能执行sp_addthreshold,您还应该具有执行阈值过程中的所有命令的权限.
例如,要为currentaudittable执行sp_configure,sso_role必须为活动状态.
当阈值过程触发时,AdaptiveServer会尝试启用在执行sp_addthreshold时有效的所有角色和权限.
要将阈值过程audit_thresh附加到三个设备段:usesybsecuritygosp_addthresholdsybsecurity,aud_seg_01,250,audit_threshsp_addthresholdsybsecurity,aud_seg_02,250,audit_threshsp_addthresholdsybsecurity,aud_seg_03,250,audit_threshgo当前审计表中保留的可用页少于250页时,样本阈值过程audit_thresh会接管控制.
有关添加阈值过程的详细信息,请参见《系统管理指南,卷2》中的"使用阈值管理可用空间".
在样本阈值过程就位的情况下进行审计启用审计后,SAPASE会将所有审计数据写入最初的当前审计表sysaudits_01.
当sysaudits_01还剩不到250页就将写满时,阈值过程audit_thresh将触发.
该过程将当前审计表切换到sysaudits_02,而SAPASE会立即开始将新的审计记录写入sysaudits_02.
该过程还会将所有审计数据从sysaudits_01复制到audit_db数据库中的audit_data存档表.
审计表的轮换以这种方式继续下去,不需要手动干预.
审计配置参数使用auditqueuesize和suspendauditwhendevicefull配置参数进行审计安装.
设置以下配置参数:auditqueuesize设置内存中审计队列的记录数目.
suspendauditwhendevicefull确定在当前审计表完全写满时SAPASE的行为.
仅当附加到当前表段的阈值过程运行不正常时,才会发生完全充满的情况.
管理审计队列的大小审计队列池所消耗的内存量在auditqueuesize参数中定义,并包括数据缓冲区和内存池的开销.
但是,池中的内存量可能会因版本和芯片体系结构而异.
缺省审计队列大小为100字节.
第10章:审计306AdaptiveServerEnterprise使用sp_configure设置审计队列的长度.
语法为:sp_configure"auditqueuesize",[value]value是审计队列可容纳的记录数.
最小值是1,最大值是65,535.
例如,要将审计队列大小设置为300,请执行:sp_configure"auditqueuesize",300有关设置审计队列大小和其它配置参数的详细信息,请参见《系统管理指南,卷1》中的"设置配置参数".
设备已满时挂起审计如果有两个或多个审计表,每个表都位于非主设备的单独设备上,而且每个审计表段都有阈值过程,则审计设备应绝不会充满.
只有当阈值过程运行不正常时,才会发生"全满"情况.
使用sp_configure设置suspendauditwhendevicefull参数,以确定设备确实充满时所发生的情况.
选择下列选项之一:将导致审计事件的审计进程和所有用户进程挂起.
系统安全员清除当前审计表后,恢复正常操作.
截断下一个审计表并开始使用它.
这样,就可以不需要系统安全员的干预而继续进行正常操作.
使用sp_configureto设置此配置参数.
sso_role必须为活动状态.
语法为:sp_configure"suspendauditwhendevicefull",[0|1]0–在当前审计表写满时,截断下一个审计表,并开始将其用作当前审计表.
如果将该参数设置为0,审计进程将永不会挂起;但是,如果旧的审计记录尚未存档则会丢失.
1(缺省值)-挂起导致可审计事件的审计进程和所有用户进程.
要恢复正常操作,系统安全员必须登录并将一个空表设置为当前审计表.
在此期间,系统安全员不能进行正常审计.
如果系统安全员的操作在正常情况下会生成审计记录,SAPASE会将一条错误消息和有关该事件的信息发送到错误日志中.
如果已将一个阈值过程附加到审计表段,则将suspendauditwhendevicefull设置为1(开启).
如果设置为0(关闭),则在阈值过程有机会存档审计记录之前,SAPASE可能会截断已写满的审计表.
查询审计追踪若要查询审计追踪,请使用SQL来选择和总结审计数据.
如果按照审计追踪管理中描述的过程进行操作,审计数据将被自动存档到另一数据库中的一个或多个表中.
例如,假定审计数据位于audit_db数据库中名为audit_data的表中.
若要选择由"bob"于1993年7月5日所执行任务的审计记录,请执行:useaudit_dbgo第10章:审计安全性管理307select*fromaudit_datawhereloginname="bob"andeventtimelike"Jul5%93"go以下命令请求具有活动的系统安全员角色的用户在pubs2数据库中所执行命令的审计记录:select*fromaudit_datawhereextrainfolike"%sso_role%"anddbname="pubs2"go下面的命令请求所有表截断(事件64)的审计记录:select*fromaudit_datawhereevent=64go要使用审计事件的名称来查询审计追踪,请使用audit_event_name函数.
例如,若要请求所有数据库创建事件的审计记录,请输入:select*fromaudit_datawhereaudit_event_name(event)="CreateDatabase"go向审计追踪中添加用户指定的记录sp_addauditrecord允许用户向审计追踪中输入注释.
语法为:sp_addauditrecord[text][,db_name][,obj_name][,owner_name][,dbid][,objid]所有参数都是可选的.
text–是要添加到extrainfo审计表中的消息文本.
db_name–是记录中引用的数据库的名称,它会被插入到当前审计表的dbname列中.
obj_name–是记录中引用的对象的名称,它会被插入到当前审计表的objname列中.
owner_name–是记录中引用的所有者的名称,它会被插入到当前审计表的objowner列中.
dbid–是一个整数值,表示db_name的数据库ID号,此数值会被插入到当前审计表的dbid列中.
不要将其置于引号中.
objid–是一个整数值,表示obj_name的对象ID号.
不要将其置于引号中.
objid会被插入到当前审计表的objid列中.
在下列情况下,可使用sp_addauditrecord:对sp_addauditrecord具有执行权限.
使用sp_configure激活了审计配置参数.
adhoc审计选项通过sp_audit启用.
第10章:审计308AdaptiveServerEnterprise缺省情况下,只有系统安全员和sybsecurity的数据库所有者才能使用sp_addauditrecord.
可以将执行该命令的权限授予其他用户.
添加用户定义的审计记录的示例向当前审计表添加记录和将信息插入到extrainfo和dbname列中的示例.
下面的示例向当前审计表中添加一条记录.
文本部分将输入到当前审计表的extrainfo列中;"corporate"将输入到dbname列中;"payroll"将输入到objname列中;"dbo"将输入到objowner列中;"10"将输入到dbid列中;"1004738270"将输入到objid列中:sp_addauditrecord"IgaveA.
Smithpermissiontoviewthepayrolltableinthecorporatedatabase.
Thispermissionwasineffectfrom3:10to3:30pmon9/22/92.
","corporate","payroll","dbo",10,1004738270下面的示例仅将信息插入当前审计表的extrainfo和dbname列中:sp_addauditrecord@text="Iamdisablingauditingbrieflywhilewereconfigurethesystem",@db_name="corporate"截断事务日志如果为sybsecurity数据库启用了trunclogonchkpt选项,则不必担心事务日志会写满.
SAPASE每次执行checkpoint时都会截断日志.
如果启用此选项,则无法使用dumptransaction来转储事务日志,但可使用dumpdatabase来转储数据库.
如果按照设置阈值过程中的过程进行操作,审计表会自动存档到另一数据库的表中.
可以对此存档数据库使用标准备份和恢复过程.
如果sybsecurity设备上出现故障,则可以重新装载数据库并继续进行审计.
至多会丢失内存中的审计队列和当前审计表中的记录,因为存档数据库包含了所有其它审计数据.
重新装载数据库后,使用sp_configurewithtruncate来设置和截断当前审计表.
如果转储数据库后未更改服务器范围的审计选项,则sysauditoptions中存储的所有审计选项在重新装载sybsecurity时都将自动恢复.
如果没有恢复,可以运行脚本,以在重新开始审计前设置这些选项.
在不截断的情况下管理事务日志将最后机会阈值过程附加到事务日志段可用于控制段中剩余的空间何时小于阈值量.
如果使用sp_dboption禁用trunclogonchkpt,事务日志将会充满.
您应计划将最后机会阈值过程附加到事务日志段.
当段中剩余的空间小于SAPASE自动计算的阈值量时,该过程将接管控制.
该阈值量是备份事务日志所需的可用日志页数的一个估计值.
第10章:审计安全性管理309最后机会阈值过程的缺省名是sp_thresholdaction,但只要sa_role为活动状态,就可使用sp_modifythreshold指定其它名称.
注意:sp_modifythreshold将进行检查以确保激活了"sa_role".
有关更多信息,请参见"将阈值过程附加到每个审计段".
SAPASE未提供缺省过程,但《系统管理指南,卷2》的"使用阈值管理可用空间"中包含最后机会阈值过程的示例.
该过程应该执行dumptransaction命令,后者将截断日志.
事务日志达到最后机会阈值点时,正在运行的任何事务都将被挂起,直到有空间可用为止.
由于sybsecurity数据库的abortxactwhenlogisfull选项总是设置为false,因此会发生挂起.
您不能更改此选项.
当trunclogonchkpt选项处于禁用状态时,可以对sybsecurity数据库使用标准备份和恢复过程,但要注意,恢复的数据库中的审计表与其在设备出现故障时的状态可能不同步.
单表审计如果仅使用一个审计表,则在存档审计数据和截断审计表时会消耗一定时间,在此期间将丢失写入的审计记录.
仅使用一个审计表时没有方法能避免这种情况发生.
SAP强烈建议您不要对生产系统使用单个设备进行审计.
如果仅使用一个审计表,则该审计表很可能会充满.
其后果取决于您对suspendauditwhendevicefull的设置情况.
如果已将suspendauditwhendevicefull设置为on,则审计进程将被挂起,导致审计事件的所有用户进程也被挂起.
如果suspendauditwhendevicefull为off,审计表将被截断,将丢失审计表中的所有审计记录.
对于可接受少量审计记录丢失的非生产系统,如果不能腾出用于多个审计表的额外磁盘空间,或没有其它设备可用,您可以使用单个审计表审计.
使用单个审计表的过程与使用多个审计表的过程类似,不同之处如下所述:安装时,仅指定一个系统表用于审计.
安装时,仅指定一个设备用于审计系统表.
为存档审计记录创建的阈值过程与使用多个审计表时创建的阈值过程不同.
使用单个审计表进行审计:第10章:审计310AdaptiveServerEnterprise单表审计的阈值过程单表审计与多表审计的配置步骤相同.
对于单表审计,其阈值过程应该:使用insert和select命令将几乎充满的审计表存档到另一表中.
使用truncatetable命令截断审计表以创建用于新审计记录的空间.
只有创建一个与审计表具有相同列的存档表之后,才可以存档审计记录.
执行完这些步骤后,阈值过程就能使用insert和select将审计记录复制到存档表中.
下面是使用单个审计表的阈值过程示例:createprocedureaudit_threshas/***copytheauditrecordsfromtheaudittableto**thearchivetable*/insertaud_db.
sso_user.
audit_dataselect*fromsysaudits_01return(0)go/***truncatetheaudittabletomakeroomfornew**auditrecords*/truncatetable"sysaudits_01"go创建阈值过程后,需要将该过程附加到审计表段.
有关说明,请参见"将阈值过程附加到每个审计段".
警告!
在多处理器上,即使有审计表充满之前触发的阈值过程,审计表也可能会充满.
例如,如果阈值过程运行于负载很重的CPU上,而执行可审计事件的用户进程运行第10章:审计安全性管理311于负载较小的CPU上,则触发阈值过程之前,审计表有可能充满.
配置参数suspendauditwhendevicefull确定审计表充满时所发生的情况.
有关设置此参数的信息,请参见"设备已满时挂起审计".
当前审计表填满时会发生什么以下列出了当前审计表填满时可能发生的事件.
1.
审计进程试图将下一个审计记录插入该表中.
此操作将失败,因此审计进程终止.
将向错误日志中写入一条错误消息.
2.
当用户尝试执行可审计事件时,由于审计无法继续,所以无法完成该事件.
用户进程终止.
没有试图执行可审计事件的用户不会受到影响.
3.
如果启用了登录审计,则除了系统安全员外,其他人都不能登录到服务器.
4.
如果在sso_role为活动状态时审计已执行的命令,则系统安全员将不能执行命令.
当前审计表填满时恢复如果当前审计设备和审计队列已满,系统安全员将不能执行审计.
之后系统安全员执行的每个可审计事件都将向错误日志文件中发送一条警告消息.
此消息指明日期和时间、警告审计已丢失并提供登录名、事件代码和通常存储在审计表extrainfo列中的其它信息.
当前审计表填满时,系统安全员可以存档并截断审计表,如存档审计表中所述.
系统管理员可以执行shutdown来停止服务器,然后重新启动服务器以重建审计.
如果审计系统异常终止,则系统安全员可在存档和截断当前审计表后关闭服务器.
通常只有系统管理员才能执行shutdown.
审计表只有系统安全员才能访问系统审计表,该用户可通过执行SQL命令来读取这些表.
只允许对系统审计表执行select和truncate命令.
表34.
每个审计表中的列列名数据类型说明eventsmallint审计的事件的类型.
eventmodsmallint有关被审计的事件的详细信息.
指示被审计的事件是否通过了权限检查.
可能的值有:0=此事件无修饰符.
1=事件通过了权限检查.
2=事件未通过权限检查.
spidsmallint引起写入审计记录的进程的ID.
第10章:审计312AdaptiveServerEnterprise列名数据类型说明eventtimedatetime审计事件发生的日期和时间.
sequencesmallint单个事件中记录的序列号.
某些事件需要多个审计记录.
suidsmallint执行审计事件的用户的服务器登录ID.
dbidintnull被审计的事件发生时所在的数据库ID,或者对象、存储过程或触发器(取决于事件的类型)所在的数据库ID.
objidintnull被访问的对象、存储过程或触发器的ID.
xactidbinary(6)null包含审计事件的事务的ID.
对于多数据库事务,这是该事务在其中启动的数据库中的事务ID.
loginnamevarchar(30)null与suid对应的登录名.
dbnamevarchar(30)null与dbid对应的数据库名.
objnamevarchar(30)null与objid对应的对象名.
objownervarchar(30)nullobjid的所有者名.
extrainfovarchar(255)null有关审计事件的其它信息.
该列包含一系列用分号分开的项.
nodeidtinyint发生事件的集群中的服务器nodeid.
读取extrainfo列extrainfo列包含一系列用分号分隔的数据.
数据按以下种类组织.
表35.
extrainfo列中的信息位置种类说明1角色用空格分隔的活动角色列表.
2关键字或选项用于事件的关键字或选项的名称.
例如,对于altertable命令,可能已经使用了addcolumn或dropconstraint选项.
如果列出了多个关键字或选项,则用逗号分开.
3以前值如果事件导致了值的更新,则此项包含更新之前的值.
4当前值如果事件导致了值的更新,则此项包含新值.
5其它信息为事件记录的其它与安全性相关的信息.
第10章:审计安全性管理313位置种类说明6代理信息初始登录名(如果在setproxy有效时发生该事件).
7主体名称来自基础安全性机制的主管名(如果用户的登录名是安全缺省登录名,并且用户通过统一登录名登录到SAPASE).
如果没有使用安全缺省登录名,则此项的值为NULL.
下面的示例显示了改变审计配置参数事件的extrainfo列条目.
sso_role;suspendauditwhendevicefull;1;0;;ralph;此条目表示系统安全员已将suspendauditwhendevicefull从1更改为0.
此条目没有"其它信息".
第6个类别指出用户"ralph"正在使用代理登录.
没有提供主体名.
此审计记录中的其它字段提供了其它有关信息.
例如,该记录包含服务器用户ID(suid)和登录名(loginname).
表36.
Event和extrainfo列中的值审计选项将被审计的命令或权限eventextrainfo中的信息(不受选项控制的自动被审计的事件)使用以下命令启用审计:sp_configureau-diting73—(不受选项控制的自动被审计的事件)使用以下命令禁用审计:sp_configureau-diting74—解锁管理员的帐户使用以下命令禁用审计:sp_configureau-diting74—adhoc用户定义的审计记录1用sp_addauditrecord的text参数填充extrainfoalteralterdatabase2子命令关键字:altermaxholdaltersizeinmemory第10章:审计314AdaptiveServerEnterprise审计选项将被审计的命令或权限eventextrainfo中的信息alter.
.
.
modifyownername_in_db124子命令关键字:对于用户定义的类型:owner.
obj_namename_in_dbpreservepermis-sions(如果指定该选项).
对于对象:name_in_dbpreservepermis-sion(如果指定该选项).
alter.
.
.
modifyown-erlogin_name124子命令关键字:不适用于用户定义的数据类型:对于对象:login_namepreservepermissions(如果指定该选项).
altertable3子命令关键字:add/drop/modifycolumnreplacecolumnsreplacedecryptdefaultreplace/adddecryptdefaultaddconstraintdropconstraint如果添加了一个或多个加密列,则extrainfo将包含以下内容,其中keyname是键的完全限定名:add/drop/modifycolumncolumn1/keyname1,[,column2/keyname2]bcpbcpin4—bindsp_bindefault6其它信息:缺省值的名称sp_bindmsg7其它信息:消息IDsp_bindrule8其它信息:规则的名称all、createcreatedatabase9关键字或选项:inmemorycmdtext所有命令92命令的完整文本,由客户端发送创建createdatabase9—createdefault14createorreplace命令的orreplace.
createprocedure11createorreplace命令的orreplace.
createrule13createorreplace命令的orreplace.
第10章:审计安全性管理315审计选项将被审计的命令或权限eventextrainfo中的信息createtable10对于加密列,extrainfo包含列名和密钥名.
EKcolumn1/keyname1[,column2keyname2]其中,EK为前缀,用于指示后续信息将引用加密密钥;而keyname则是密钥的完全限定名.
createtrigger12createorreplace命令的orreplace.
createview16createorreplace命令的orreplace.
createindex104其它信息:索引的名称createfunction97createorreplace命令的orreplace.
sp_addmessage15其它信息:消息号dbaccess任何用户对数据库进行的任何访问17关键字或选项:usecmdoutsidereferencedbccdbcc所有关键字81关键字或选项:任意dbcc关键字(如checkstorage)及该关键字的选项.
delete从表中删除数据的delete命令18关键字或选项:delete从视图中删除数据的delete命令19关键字或选项:deletediskdiskinit20关键字或选项:diskinit其它信息:磁盘的名称diskmirror23关键字或选项:diskmirror其它信息:磁盘的名称diskrefit21关键字或选项:diskrefit其它信息:磁盘的名称diskreinit22关键字或选项:diskreinit其它信息:磁盘的名称diskrelease87关键字或选项:diskrelease其它信息:磁盘的名称第10章:审计316AdaptiveServerEnterprise审计选项将被审计的命令或权限eventextrainfo中的信息diskremirror25关键字或选项:diskremirror其它信息:磁盘的名称diskunmirror24关键字或选项:diskunmirror其它信息:磁盘的名称diskresize100关键字或选项:diskresize其它信息:磁盘的名称dropdropdatabase26—dropdefault31—dropprocedure28—droptable27—droptrigger29—droprule30—dropview33—dropindex105其它信息:索引名称dropfunction98—sp_dropmessage32其它信息:消息号dumpdumpdatabase34—dumptransaction35—encryption_keysp_encryption106如果第一次设置口令:ENCR_ADMINsystem_encr_passwdpassword********如果后来更改口令:ENCR_ADMINsystem_encr_passwdpasswordcreateencryptionkey107关键字包含:algorithmname-bitlength/IV[random|NULL]/pad[random|NULL]user/system例如:AES-128/IVRANDOM/PADNULLUSER第10章:审计安全性管理317审计选项将被审计的命令或权限eventextrainfo中的信息alterencryptionkey108default/notdefaultdropencryptionkey109AEKmodifyencryp-tion118modifyencryptionwithuserpasswd|foruserusername{withloginpasswd|withuserpasswd|withkeyvalue}[forrecovery请注意,keyvalue仅在复制alterencryptionkeymodifyencryption时显示.
例如,当用户"stephen"修改其密钥副本时,将保存以下信息:MODIFYENCRYPTIONforuserste-phenWITHUSERPASSWDAEKaddencryption119addencryptionforuseruser_nameforloginassociation|recov-ery|withkeyvalue]请注意,keyvalue仅在复制alterencryptionkeyaddencryption时显示.
alterencryptionkeydropencryption120dropencryption[forrecovery|foruseruser_name请参见《加密列用户指南》.
alterencryptionkeymodifyowner121modifyowner[newowneruser_name]请参见《加密列用户指南》.
alterencryptionkeyre-coverkey122recoverykey[withkey_value]withkeyvalue只会在alterencryptionkey的复制过程中使用请参见《加密列用户指南》.
errorlogerrorlog或errorlog_admin函数127记录传递到errorlog_admin的参数以标识子命令:errorlog_admin(param1,param2,.
.
.
).
errors致命错误36其它信息:Errornumber.
Severity.
State非致命错误37其它信息:Errornumber.
Severity.
Stateexec_procedure执行过程38其它信息:所有输入参数exec_trigger执行触发器39—第10章:审计318AdaptiveServerEnterprise审计选项将被审计的命令或权限eventextrainfo中的信息func_obj_access、func_dbaccess通过Transact-SQL函数对对象和数据库的访问.
(必须为sa_role启用审计才能审计函数).
86—grantgrant40包含完整的命令文本(如果可用).
否则,包含被授予者和命令类型.
insert向表中插入数据的insert命令41关键字或选项:如果使用insert:insert如果使用selectinto:insertinto,后跟完全限定对象名向视图中插入数据的insert命令42关键字或选项:insertinstallinstall93—loadloaddatabase43—loadtransaction44—login到服务器的任何登录45其它信息:从中执行登录的计算机的主机名和IP地址.
Errornumber.
Severity.
State(对于失败的登录).
login_locked由于超过配置的失败登录尝试次数而被锁定的登录112logout服务器的任何注销46其它信息:主机名mountmountdatabase101—passwordsp_passwordpolicy及其所有操作(list除外).
115sp_passwordpolicy的参数quiescequiescedatabase96—reference创建表的引用91关键字或选项:reference其它信息:引用表的名称removeremovejava94—第10章:审计安全性管理319审计选项将被审计的命令或权限eventextrainfo中的信息revokerevoke47包含完整的命令文本(如果可用).
否则,包含被授予者和命令类型.
rpc来自另一台服务器的远程过程调用48关键字或选项:客户端程序的名称其它信息:服务器名,即从其执行RPC的计算机的主机名.
到另一台服务器的远程过程调用49关键字或选项:过程名称rolelocked角色设置/取消设置133角色名和锁定原因:角色已由suid通过手动执行alterrolerolenamelock而锁定角色已由SAPASE锁定,因为角色激活尝试的失败次数达到了maxfailed_logins限制securityconnectto(仅限CIS)90关键字或选项:connecttoonlinedatabase83—proc_role函数(从系统过程中执行)80其它信息:所需的角色由sso重新生成口令76关键字或选项:设置SSO口令其它信息:登录名角色切换55以前值:on或off当前值:on或off其它信息:正在设置的角色的名称服务器启动50其它信息:-dmasterdevicename-iinterfacesfilepath-Sservername-eerrorfilenamesp_webservices111关键字或选项:deploy(如果部署一项Web服务).
deploy_all(如果部署所有Web服务)sp_webservices111关键字或选项:undeploy(如果取消部署一项Web服务).
undeploy_all(如果取消部署所有Web服务)第10章:审计320AdaptiveServerEnterprise审计选项将被审计的命令或权限eventextrainfo中的信息服务器关闭51关键字或选项:shutdownsetproxy或setses-sionauthorization88以前值:上一个suid当前值:新suidsp_configure82关键字或选项:SETCONFIG其它信息:如果正在设置某个参数:配置参数的编号如果使用配置文件来设置参数:配置文件的名称sp_ssladmin管理已启用99关键字包含SSL_ADMINaddcert(如果添加认证).
审计表访问61—createlogin、droplogin103关键字或选项:createlogin、droplogincreate、drop、alter、grant或revokerole85关键字或选项:create、drop、alter、grant或revokerole内置函数86关键字或选项:函数的名称要审计的安全命令或访问,尤其是使用-u选项启动SAPASE来解锁管理员帐户.
95其它信息包含"解锁管理员帐户"对LDAPstatechanges的更改123关键字或选项:主URL状态和辅助URL状态以前值当前值其它信息指示状态更改是自动发生还是由于手动输入的命令而发生的.
系统或sp_password-policy为网络口令加密进行的非对称密钥对重新生成117extrainfo中的信息第10章:审计安全性管理321审计选项将被审计的命令或权限eventextrainfo中的信息select从表中选择数据的select命令62关键字或选项:selectintoselectreadtext从视图中选择数据的select命令63关键字或选项:selectintoselectreadtextsetusersetuser84其它信息:正在设置的用户的名称sproc_auth在系统存储过程内部执行的授权检查.
80、146table_accessdelete18关键字或选项:deleteinsert41关键字或选项:insertselect62关键字或选项:selectintoselectreadtextupdate70关键字或选项:updatewritetexttruncatetruncatetable64—transfer_tabletransfertable136transfertableunbindsp_unbindefault67—sp_unbindmsg69—sp_unbindrule68—unmountunmountdatabase102—createmanifestfile116extrainfo中的信息第10章:审计322AdaptiveServerEnterprise审计选项将被审计的命令或权限eventextrainfo中的信息update对表执行的update命令70关键字或选项:updatewritetext对视图执行的update命令71关键字或选项:updatewritetextview_accessdelete19关键字或选项:deleteinsert42关键字或选项:insertselect63关键字或选项:selectintoselectreadtextupdate71关键字或选项:updatewritetext表37.
审计事件值审计事件ID命令名审计事件ID命令名1adhocauditrecord62selecttable2alterdatabase68unbindrule3altertable69unbindmessage4bcpin70updatetable5保留71updateview6binddefault72保留7bindmessage73启用审计8bindrule74禁用审计9createdatabase75保留10createtable76SSO更改口令第10章:审计安全性管理323审计事件ID命令名审计事件ID命令名11createprocedure77保留12createtrigger78保留13createrule79保留14createdefault80执行的角色检查在系统存储过程内部执行的授权检查15createmessage81dbcc16createview82config17accesstodatabase83onlinedatabase18deletetable84setuser命令19deleteview85createrole、droprole、alterrole、grantrole或revokerole20diskinit86内置函数21diskrefit87磁盘释放22diskreinit88setSSA命令23diskmirror89kill或terminate命令24diskunmirror90connect25diskremirror91reference26dropdatabase92命令文本27droptable93JCSinstall命令28dropprocedure94JCSremove命令29droptrigger95解锁管理员帐户30droprule96quiescedatabase31dropdefault97createSQLJ函数32dropmessage98dropSQLJ函数33dropview99SSL管理34dumpdatabase100diskresize35dumptransaction101mountdatabase36致命错误102unmountdatabase第10章:审计324AdaptiveServerEnterprise审计事件ID命令名审计事件ID命令名37非致命错误103createlogin38存储过程的执行104createindex39触发器的执行105dropindex40grant106sp_encryption(加密列管理)41inserttable107createencryptionkey42insertview108AlterEncryptionKeyas/notdefault43loaddatabase109dropencryptionkey44loadtransaction110111deployuser-definedwebservicesundeployuserdefinedwebservices45login112登录已锁定46logout113quiesceholdsecurity47revoke114quiescerelease48rpcin115口令管理49rpcout116createmanifestfile50服务器启动117regeneratekeypair51服务器关闭118alterencryptinkeymodifyencryption52保留119alterencryptionkeyaddencryption53保留120alterencryptionkeydropencryption54保留121alterencryptionkeymodifyowner55角色切换122alterencryptionkeyforkeyrecovery56保留123LDAP状态更改57保留124alter.
.
.
modifyowner58保留127错误日志管理59保留136transfertable60保留136transfertable61对审计表的访问137createloginprofile62从表中选择数据的select命令138alterlogin第10章:审计安全性管理325审计事件ID命令名审计事件ID命令名63从视图中选择数据的select命令139droplogin64truncatetable140alterloginprofile65保留141droploginprofile66保留142保留67unbinddefault143alterthreadpool146sproc_auth监控失败登录尝试次数当登录帐户由于失败登录尝试次数超出配置次数而被锁定时,将记录审计选项login_locked和事件LockedLogin(value112).
设置了审计选项login_locked即会启用此事件.
要设置login_locked,请输入:sp_audit"login_locked","all","all","ON"如果审计表已满,并且无法记录事件,则会向错误日志发送包含相关信息的消息.
审计记录中包括主机名和网络IP地址.
监控审计日志中是否有LockedLogin事件(编号112)有助于识别对登录帐户的攻击.
审计登录失败尽管客户端应用程序可能由于多种原因而登录失败,但SAPASE不会向这些应用程序提供任何有关登录失败的详细信息.
这样可以避免将相关信息提供给企图破译口令或以其它方式违反验证机制的恶意用户.
但是,作为系统管理员,详细信息有助于诊断管理或配置问题,并可帮助安全员调查是否有人试图违反安全性机制.
以下命令可启用对所有登录失败的审计:sp_audit"login","all","all","fail"为防止对信息的不适当的使用,只有被授予了SSO角色的用户才能访问包含此敏感信息的审计追踪信息.
将审计以下情况下的登录失败:对于作为Windows服务启动的SAPASE,如果SybaseSQLServer服务已暂停(例如,由MicrosoftManagementConsoleforServices暂停).
如果远程服务器尝试建立服务器到服务器RPC的节点处理器,但资源不足(或此处列出的任何其它情况)导致节点处理器初始化失败.
第10章:审计326AdaptiveServerEnterprise对用于Windows的SAPASE使用"受托登录"或"统一登录"配置,但指定的用户不是受托管理员(即验证失败).
SAPASE不支持客户端请求的SQL接口.
用户试图在单用户模式下登录到SAPASE.
在单用户模式下,只允许一个具有sa_role的用户登录到SAPASE.
其它登录会被阻止,即使用户具有sa_role.
master数据库中的syslogins表无法打开,表明master数据库具有内部错误.
客户端试图远程登录,但sysremotelogins无法打开,或指定用户帐户没有任何条目且不存在任何guest帐户.
客户端试图远程登录,虽然它在sysremotelogins中找到引用指定用户的本地帐户的条目,但引用的本地帐户不存在.
客户端程序请求安全会话(例如Kerberos验证),但由于以下原因无法建立安全会话:安全子系统未在启动时初始化.
没有足够的内存资源来存储分配的结构.
验证协商失败.
未找到针对指定用户的验证机制.
指定的口令不正确.
syslogins不包含指定登录所需的条目.
登录帐户被锁定.
SAPASE已达到了它对用户连接数量的限制.
设置了配置参数unifiedloginrequired,但相应的安全子系统未验证登录.
网络缓冲区不可用,或请求的包大小无效.
客户端应用程序请求基于主机的通信套接字连接,但没有用于基于主机的通信缓冲区的内存资源.
正在关闭,但指定用户没有sa角色.
SAPASE无法打开缺省数据库进行登录,且此登录没有对master数据库的访问权限.
客户端发出了高可用性登录故障切换请求,但高可用性子系统没有对此登录的高可用性会话,或此登录无法等待故障切换完成.
客户端请求高可用性登录设置,但高可用性子系统无法创建会话,或无法完成对高可用性会话的TDS协议协商.
SAPASE无法设置tempdb进行登录.
检测到TDS登录协议错误.
第10章:审计安全性管理327第10章:审计328AdaptiveServerEnterprise
Sharktech又称SK或者鲨鱼机房,是一家主打高防产品的国外商家,成立于2003年,提供的产品包括独立服务器租用、VPS云服务器等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等。之前我们经常分享商家提供的独立服务器产品,近期主机商针对云虚拟服务器(CVS)提供优惠码,优惠后XS套餐年付最低仅33.39美元起,支持使用支付宝、PayPal、信用卡等付款方式。下面以XS套餐为例,分享产品配...
乐凝网络怎么样?乐凝网络是一家新兴的云服务器商家,目前主要提供香港CN2 GIA、美国CUVIP、美国CERA、日本东京CN2等云服务器及云挂机宝等服务。乐凝网络提供比同行更多的售后服务,让您在使用过程中更加省心,使用零云服务器,可免费享受超过50项运维服务,1分钟内极速响应,平均20分钟内解决运维问题,助您无忧上云。目前,香港HKBN/美国cera云服务器,低至9.88元/月起,支持24小时无理...
一、麻花云官网点击直达麻花云官方网站二、活动方案优惠码:专属优惠码:F1B07B 享受85折优惠。点击访问活动链接最新活动 :五一狂欢 惠战到底 香港云主机 1.9折起香港特价体验云主机CN2 云服务器最新上线KVM架构,,默认40G SSD,+10G自带一个IPv4,免费10Gbps防御,CPU内存带宽价格购买1核1G1M19元首月链接2核2G 2M92元/3个月链接2核4G3M112元/3个月...
无法删除访问被拒绝为你推荐
Source163地址163ipad如何上网IPAD4怎样上网?勒索病毒win7补丁由于电脑没连接网络,所以成功躲过了勒索病毒,但最近要联网,要提前装什么补丁吗?我电脑断网好久了win10关闭445端口win10怎么关闭445的最新相关信息css下拉菜单css下拉菜单代码谷歌sb为什么搜索SB第一个是google?win7关闭135端口win7下怎么关135和8909端口chromeframechrome需要frame吗迅雷下载速度为什么现在迅雷下载的速度比原来慢得多?
便宜域名 20g硬盘 gitcafe web服务器架设 什么是刀片服务器 亚马逊香港官网 酷番云 t云 linux使用教程 免费mysql数据库 外贸空间 国内域名 电信网络测速器 wordpress中文主题 存储服务器 杭州电信宽带 深圳主机托管 双11促销 密钥索引 碳云 更多