您的位置:首页技术文章
文章详情页

编程管理sql server的帐号

【字号: 日期:2023-11-01 18:31:15浏览:76作者:猪猪
编程管理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'用户名'
标签: Sql Server 数据库