SQL安全性

      在账户的设置问题上,尽量不要设置全局用户账号,如果必须要的话,尽量把使用它的人数控制在很少的人数之内(通常情况下为2人);

       SQL SERVER 安全性带来的好处:

    1.用户不必为了获取访问系统权限而成为域用户.

    2.更容易使用程序来控制用户信息.

       不足之处:

        1.用户登录操作可能需要多次,如:一次登录用于获取网络访问,一次用于为各应用程序创建到SQL Server 的连接.

    2.多个登录账户意味着需要更多的维护工作.

    3.若需要多个登录密码的话,会导致密码容易变得不一致,进而造成更多的登录失败或忘记密码.

  使用sa用户时往往意味着用户拥有完全的权限.总之,即使总是需要完全访问权限,可以使用sa账户把常规的用户账户加入到sysadmins服务器角色中,这样既提供了sa账户的权限,又获得了单独密码多带来的安全性以及能够对当前谁登陆到系统进行审计跟踪.

  创建登陆名:

         create login login_name 后跟两种情况:

          1.with password=' ' hashed--只有提供的密码经过散列加密后才可用,否则省去

               must_change--指定后,用户在第一次登录时将会被提示修改密码

     defualt_database= ...--每当用户登录时该数据库将会用作当前数据库

           第一种情况为直接定义与SQL Server身份验证相关的登录选项.只有启用了SQL Server 安全性(使用Windows验证)时这个选项才可用.

    2.from --登录来源(选其一)

             WINDOWS--映射到一个现有的windows登录名或组上

              | certificate certificate_name --登录基于X.509证书

      |  asymmetric key asymmetric_key_name 来源于非对称密钥

  修改登录名:

      alter login login_name

       enable|disable--启用或禁用该登录

  with

  password=''

      name=new _login_name--新的登录名

  其它与创建时大致一样.

  用户权限分为三类:

     1.登录权限

  2.访问某个特定数据库的权限

  3.数据库中某个特定对象上执行特定动作的权限

  当一个数据库create一个用户时,其权限实际上是存储在数据库中并映射到该用户的服务器标识上.

  create user user_name from login login_name

  sp_grantdbaccess是授予一个登录账户访问给定数据库的遗留方法.只能授予的是当前数据库的访问权限.

  grant (权限) on (表名) to(登录名或角色名) 

      with grant option --不建议使用,使得赋权目标不明确

      as (角色名)--可以处理一个登录属于多个角色问题

  deny (权限) on (表名) to(role_name|login_name) cascade--级联拒绝 ,优先级高于grant

  服务器角色局限于那些在SQL Server发行时就已经内置的角色,它们主要用来进行系统维护以及授予进行非特定于数据库的任务(创建登陆账户和创建链接服务器)的权限

  数据库角色的范围仅局限于单个数据库.

  create role role_name;--创建角色

  exec sp_addrolemember role_name ,user_name;--将用户添加到角色中

  从角色中删除用户的用sp_droprolemember

  exec sp_droprole role_name--删除角色

  应用程序角色:可以授予用户只读访问数据库(仅select),同时又允许他们在应用程序范围之内修改数据.

  其工作如下:

  1.用户登录  

  2.验证登录账号,接着用户收到他的访问权限

  3.应用程序将会执行一个叫sp_setapprole的系统存储过程,并提供一个角色名和密码.

  4.验证应用程序角色,接着连接被切换到应用程序角色的上下文.

  5.用户将在该连接有效期间保持应用程序角色的权限.用户无法回到他的访问权限.

      create application role role_name with password=''--创建应用程序角色

  grant (权限) on table_name to app_role_name--向应用程序角色添加权限

  drop application role role_name--删除应用程序名

  注意:

  一.不要使用sa账户

    SQL Server 用固定的服务器角色sysadmin来模拟sa用户级别的访问权限,因此强烈建议把登录账号添加到该角色中,然后把sa的密码修改为很长且很难理解的密码--一个不值得花费时间去破解的密码.

     EXEC sp_addsrvrolemember login_name,sysadmin

  二.小心谨慎地把xp_cmdshell赋权给其它角色.

    因为现在任何使用xp_cmdshell的用户对整个网络都拥有相当开放的访问权限.

  三.不要忘记把视图,存储过程和UDF作为安全性工具

  

原文地址:https://www.cnblogs.com/PurpleRain/p/2757331.html