编程管理SQLSERVER的帐号;;;;
每个人都关心数据安全。
如果不关心的话,可能没有意识到访问服务器中的敏感数据是非常容易的。
因为SQLSERVER在这方面已经替我们考虑过了,
所以在我们开发应用程序就可以直接使用SQLSERVER的安全策略。;;
在SQLSERVER中,我们可以在ENTERPRISEMANAGER中创建一个登录帐号,
并且赋予一定的权限,如果要做到我们的应用程序中呢?;;
==============================================================================
SQLSERVER提供了如下系统过程;;
▲▲一、SP_ADDLOGIN
创建新的MicrosoftSQLServer登录,使用户得以连接使用SQLServer身份验证的SQLServer实例。
语法
sp_addlogin[@loginame=]'login'
[,[@passwd=]'password']
[,[@defdb=]'database']
[,[@deflanguage=]'language']
[,[@sid=]sid]
[,[@encryptopt=]'encryption_option']
参数
[@loginame=]'login'
登录的名称。login的数据类型为sysname,没有默认设置。
[@passwd=]'password'
登录密码。password的数据类型为sysname,默认设置为NULL。sp_addlogin执行后,password被加密并存储在系统表中。
[@defdb=]'database'
登录的默认数据库(登录后登录所连接到的数据库)。database的数据类型为sysname,默认设置为master。
[@deflanguage=]'language'
用户登录到SQLServer时系统指派的默认语言。language的数据类型为sysname,默认设置为NULL。如果没有指定language,那么language被设置为服务器当前的默认语言(由sp_configure配置变量defaultlanguage定义)。更改服务器的默认语言不会更改现有登录的默认语言。language保持与添加登录时所使用的默认语言相同。
[@sid=]sid
安全标识号(SID)。sid的数据类型为varbinary(16),默认设置为NULL。如果sid为NULL,则系统为新登录生成SID。尽管使用varbinary数据类型,非NULL的值也必须正好为16个字节长度,且不能事先存在。SID很有用,例如,如果要编写SQLServer登录脚本,或要将SQLServer登录从一台服务器移动到另一台,并且希望登录在服务器间具有相同的SID时。
[@encryptopt=]'encryption_option'
指定当密码存储在系统表中时,密码是否要加密。encryption_option的数据类型为varchar(20),可以是下列值之一。
值 描述;;
-------------------------------------------------------------------------------
NULL 加密密码。这是默认设置。;;
skip_encryption 密码已加密。SQLServer应该存储值而且不用重新对其加密。;;
skip_encryption_old 已提供的密码由SQLServer较早版本加密。SQLServer应该存储值而且不用重新对其加密。此选项只供升级使用。;;
▲▲二、SP_GRANTDBACCESS
为MicrosoftSQLServer登录或MicrosoftWindowsNT用户或组在当前数据库中添加一个安全帐户,并使其能够被授予在数据库中执行活动的权限。
语法:
sp_grantdbaccess[@loginame=]'login'
[,[@name_in_db=]'name_in_db'[OUTPUT]]
参数:
[@loginame=]'login'
当前数据库中新安全帐户的登录名称。WindowsNT组和用户必须用WindowsNT域名限定,格式为"域用户",例如LONDONJoeb。登录不能使用数据库中已有的帐户作为别名。login的数据类型为sysname,没有默认值。
[@name_in_db=]'name_in_db'[OUTPUT]
数据库中帐户的名称。name_in_db是sysname类型的OUTPUT变量,默认值为NULL。如果没有指定,则使用login。如果将其指定为NULL值的OUTPUT变量,则设置@name_in_db为login。当前数据库不必存在name_in_db。
▲▲三、SP_DROPLOGIN
删除MicrosoftSQLServer登录,以阻止使用该登录名访问SQLServer。
语法
sp_droplogin[@loginame=]'login'
参数
[@loginame=]'login'
将被删除的登录。login的数据类型为sysname,没有默认值。login必须已经存在于SQLServer中。
▲▲四、SP_REVOKEDBACCESS
从当前数据库中删除安全帐户。
语法
sp_revokedbaccess[@name_in_db=]'name'
参数
[@name_in_db=]'name'
是要删除的帐户名。name的数据类型为sysname,无默认值。name可以是Microsoft?SQLServer?用户名或MicrosoftWindowsNT?用户名或组名,而且必须存在于当前数据库中。当指定WindowsNT用户或组时,请指定该WindowsNT用户或组在数据库中可被识别的名称(即用sp_grantdbaccess添加的名称)。
▲▲五、GRANT
在安全系统中创建项目,使当前数据库中的用户得以处理当前数据库中的数据或执行特定的Transact-SQL语句。
语法
语句权限:
GRANT{ALL|statement[,...n]};;
TOsecurity_account[,...n]
对象权限:
GRANT
{ALL[PRIVILEGES]|permission[,...n]}
{;;
[(column[,...n])]ON{table|view}
|ON{table|view}[(column[,...n])]
|ON{stored_procedure|extended_procedure}
|ON{user_defined_function}
};;
TOsecurity_account[,...n];;
[WITHGRANTOPTION];;
[AS{group|role}]
▲▲六、REVOKE
删除以前在当前数据库内的用户上授予或拒绝的权限。
语法
语句权限:
REVOKE{ALL|statement[,...n]};;
FROMsecurity_account[,...n]
对象权限:
REVOKE[GRANTOPTIONFOR]
{ALL[PRIVILEGES]|permission[,...n]}
{;;
[(column[,...n])]ON{table|view}
|ON{table|view}[(column[,...n])]
|ON{stored_procedure|extended_procedure}
|ON{user_defined_function}
};;
{TO|FROM}
security_account[,...n];;
[CASCADE];;
[AS{group|role}];;
▲▲SP_PASSWORD
添加或更改Microsoft?SQLServer?登录的密码。
语法
sp_password[[@old=]'old_password',]
{[@new=]'new_password'}
[,[@loginame=]'login']
参数
[@old=]'old_password'
是旧密码。old_password为sysname类型,其默认值为NULL。
[@new=]'new_password'
是新密码。new_password为sysname类型,无默认值。如果没有使用命名参数,就必须指定old_password。
[@loginame=]'login'
是受密码更改影响的登录名。login为sysname类型,其默认值为NULL。login必须已经存在,并且只能由sysadmin固定服务器角色的成员指定。
;;
=============================================================================
应用实例:;;
--添加
--添加用户:
execsp_addlogin'用户名','密码','默认数据库名'
--添加到数据库
execsp_grantdbaccess'用户名','数据库名'
--分本权限
grantinsert,select,update,deleteontable1topublic;;
--删除;;
--删除权限
revokeinsert,deleteontable1frompublic;;
--删除数据库中的用户
execsp_revokedbaccess'用户名'
--删除用户
execsp_droplogin'用户名'