SQL Server数据库的安全
网络通信
大部分数据库管理员往往只注重数据的管理,对于“数据库安全”这一问题不够重视。
一、指定系统管理员密码
众所周知,安装SQL Server时会自动建立一个系统管理员登录标志“SA”,而SQL Server安装程序不会给“SA”指派密码。如果服务器安全性设置为混合模式,我们应该指派“SA”密码。
步骤如下:打开企业管理器,展开分层树状结构中的服务器,双击安全性下的登录选项。右击“SA”,选择属性,两次输入密码后确认即可(图1)。也可通过下面语句为“SA”设置密码:SP_Password Null,'Password','SA'。
二、访问控制策略
1.SQL Server提供了多层安全性。外层的“登录账户认证”直接集成到Windows NT中,如果使用“Windows NT验证”,SQL Server还可整合到Windows NT的安全策略中,加强了SQL Server的安全性。
步骤如下:打开企业管理器,展开分层树状结构中的服务器,再展开安全性,双击安全性下的登录选项,选择空白处,右击选择“新建登录”,进入“常规选项卡”,选择验证形式后确认即可。
2.用户登录内层的“访问许可确认”后,客户端可向SQL Server发送TRANSACT-SQL语句。访问许可由数据库所有者或数据库对象所有者使用“Grant(授权)”、“Deny(禁止)”、“Revoke(撤消)”颁布。
图2中的语句设置了“Pubs”数据库的用户访问许可,允许“Test”用户和“Workgroup”域中的“SQL Guest”用户创建表和视图,但禁止“Test”用户和“Workgroup”域中的“SQL Guest”用户创建存储过程。
三、管理服务器登录标志
1.为Windows NT用户创建SQL Server服务器登录标志。用下面语句设置“Workgroup”域中的“SQL Guest”用户组中所有用户可以连接到SQL Server服务器:SP_Grantlogin 'Workgroup\SQLGuest'。
对于Windows NT的本地组,应使用“Builtin”代替域名“Workgroup”;禁止和撤消命令分别用“Deny”、“Revoke”代替即可。
2.为没有建立Windows NT账户的用户创建SQL Server登录标志。在创建登录标志的同时,可以指定其口令和默认打开的数据库。可用下列语句设置登录标志“Test”,密码为“Password”,默认打开数据库为“Pubs”:SP_ADDLOGI'Test','Password','Pubs'。
四、数据库用户管理
SQL Server中包含了三种特殊用户,它们具有特殊的权限。
1.数据库所有者(DBO)
即SQL Server数据库的创建者。“Sysadmin”的所有成员被映射为每一个数据库的“DBO”。
这里需要注意两点:第一,“DBO”用户不能从数据库中删除,“DBO”对数据库具有全部操作权限,并可以向其他用户授权;第二,“Sysadmin”角色成员所创建的数据库对象自动属于“DBO”,而不属于用户自身。所以,在Transact_SQL语句中,限定数据库对象时,如果数据库对象为“Sysadmin”角色成员所创建,则使用“DBO”,否则使用创建者的名称进行限定。
例如:“Pubs”数据库有“Test1”和“Test”两个用户,“Test1”属于“Sysadmin”角色,而“Test”属于“DB_Owner”角色,他们分别在“Pubs”数据库中建立两个数据表“Table1”和“Table”,那么指定这两个对象时,要分别使用“DBO”和“Test”,即:
Select * From Pubs.DBO.Table1
Select * From Pubs.Test.Table
2.数据库对象所有者
数据库对象所有者具有该对象的全部权限,只有向其他用户授权后,其他用户才可以访问该对象。
注意:在一个数据库中不同用户可以创建同名的数据库对象。所以,用户在访问数据库对象时,必须用数据库对象所有者进行限定。
下列语句可以检索用户“Test”创建的表:
Select * From Test.Table
3.Guest用户
“Guest”用户是SQL Server数据库的一个特殊用户,当具有SQL Server服务器登录标志的用户在数据库中没有建立相应的数据库用户账户,而他又要访问该数据库时,SQL Server就查找该数据库中是否有“Guest”用户。若存在该用户,就允许连接用户以“Guest”用户的身份访问,否则拒绝。
注意:SQL Server系统数据库“Master”和“Tempdb”中的“Guest”用户不能被删除,而其他数据库中的“Guest”用户均可被创建或删除。
要想使数据库绝对的安全,还应学习更多的知识。我们在对数据库进行维护的时候,也应当勤打补丁,经常备份,做到有备无患。

