zoukankan      html  css  js  c++  java
  • Chapter 2 User Authentication, Authorization, and Security(2):创建登录帐号

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38705965。专题文件夹:http://blog.csdn.net/dba_huangzj/article/details/37906349

    未经作者允许。不论什么人不得以“原创”形式公布。也不得已用于商业用途,本人不负责不论什么法律责任。

            前一篇:http://blog.csdn.net/dba_huangzj/article/details/38657111

    前言:

    登录帐号是定义在server(实例)级别。并能被授予进行管理任务、连接、訪问数据库等权限的帐号。

    SQL Server安全模型有两个级别:server级别和数据库级别。登录帐号必须先创建在server级别。假设须要訪问数据库,还须要在数据库级别创建一个用户映射到已有的登录名中。

    对于从SQL Server 2012引入的部分包括数据库(Partially Contained Databases),允许在server级别上没有登录名也能够訪问数据库。将会在后面章节中介绍。

    实现:

    1. 打开SSMS,连接到相应实例,然后在server级别的【安全性】中右键【登录名】选择【新建登录】:

    image

    2. 输入登录名,能够是SQL Server帐号,也能够是Windows帐号(<机器名 or 域名><帐号名>),假设是Windows帐号,能够在【查找】中浏览。

    image

     原文出处:http://blog.csdn.net/dba_huangzj/article/details/38705965

    3. 假设选择了【SQL Server 身份验证】。能够输入password和确认password,在某些情况下能够使用空password(当然不建议)。以下是须要说明的选项:

      • 强制实施password策略(Enforce password policy):强制使用Windows的password策略。不勾选这个选项。则能够使用空password,而且以下两个选项也将关闭。
      • 强制password过期(Enforce password expiration):依据Windows的password策略是password过期。

      • 用户在下次登录时必须更改password(User must change password at next login):用户在首次使用GUI登录时必须改动password。

    4. 在界面的最下方。能够选择默认数据库,假设不选则是master库。作为最佳实践,建议不要连到master库,DBA及开发者可能会忘记切换数据库导致一些DDL/DML语句执行在master库中。本人习惯选择用户所需的数据库,或者TempDB。

    5. 另外能够设置默认语言。可是这个可能在多语言环境中引起报错和日期格式问题。

    6. 除了使用SSMS创建,还能够使用T-SQL创建登录,以下是一个样例:

    -- 创建一个域环境中的Windows登录帐号,域名为Domain,账号名为Fred 
    CREATE LOGIN [DOMAINFred] FROM WINDOWS; 
    -- 创建一个SQL 登录帐号。登录名为Fred 
    CREATE LOGIN Fred WITH PASSWORD = '强password' MUST_CHANGE, 
    CHECK_EXPIRATION = ON, CHECK_POLICY = ON, DEFAULT_DATABASE =AdventureWorks2012, DEFAULT_LANGUAGE = us_English;


    原理:

    在Windows Server 2008 上的password策略能够參考文章:http://technet.microsoft.com/en-us/library/cc264456.aspx

    策略中定义了password复杂度、长度、password历史、最小和最大生命周期和锁定參数。默认的复杂度为:

    • 不能包括出如今登录名中的多于2个连续的字符。
    • password长度最少6个字符。

    • password须要包括以下4种字符中的最少3种不同类型的字符:大写、小写、数字、特殊符号。

    假设使用了Windows用户组作为登录名,能够使用以下语句检查当前登录是否属于某个组的成员:

    SELECT IS_MEMBER('域名组名');--1为当前用户属于域中相应组的成员。

    可是注意这个函数不反映登录名连接到SQL Server后又被改动组成员的情况。

    很多其它:

     原文出处:http://blog.csdn.net/dba_huangzj/article/details/38705965

    当SQL 登录使用了CHECK_POLICY选项后,可能因为某些因素导致帐号被锁定。

    能够使用以下命令解锁:

    --通过重置password解锁 
    ALTER LOGIN fred WITH PASSWORD = '新password' UNLOCK;
    -- 不须要重置password: 
    ALTER LOGIN fred WITH CHECK_POLICY = OFF; 
    --先关闭策略 
    ALTER LOGIN fred WITH CHECK_POLICY = ON;--再开启策略


    检查登录帐号的状态:

    能够使用LOGINPROPERTY函数来检查登录的状态:具体信息能够訪问:http://msdn.microsoft.com/zh-cn/library/ms345412.aspx

    以下是一些样例:

    DECLARE @login AS SYSNAME = 'Fred'; 
    SELECT  LOGINPROPERTY(@login, 'BadPasswordCount') AS [Bad Password Count] , 
            LOGINPROPERTY(@login, 'BadPasswordTime') AS [Last Bad Password Time] , 
            LOGINPROPERTY(@login, 'DaysUntilExpiration') AS [Nb of days before expiration] , 
            LOGINPROPERTY(@login, 'HistoryLength') AS [Nb of passwords in history] , 
            LOGINPROPERTY(@login, 'IsExpired') AS [is expired] , 
            LOGINPROPERTY(@login, 'IsLocked') AS [is locked] , 
            LOGINPROPERTY(@login, 'PasswordLastSetTime ') AS [Password Last Set Time];


    改动SQL 登录名password:

    能够使用ALTER LOGIN 登录名 WITH PASSWORD=’新password';来改动SQL 登录的password。执行这个password须要具有CONTROL SERVER或者ALTER ANY LOGIN权限(分别对于那个sysadmin或securityadmin固定角色成员)。

    假设须要改动自己的password,须要提供旧password,如:

    ALTER LOGIN fred WITH 
    PASSWORD = 'my new complex password' 
    OLD_PASSWORD = 'my old complex password';


    password是使用不可逆的hash存储,假设想检查password是否正确,能够使用未公开函数PWDCOMPARE:

    USE master 
    GO 
    CREATE LOGIN Fred WITH PASSWORD ='Admin!@#123' --创建一个登录名 
    go 
    --检查登录名的password 
    SELECT PWDCOMPARE('Admin!@#123', CAST(LOGINPROPERTY('fred', 'passwordhash') as varbinary(256)));--返回1 则证明password正确
    SELECT PWDCOMPARE('123', CAST(LOGINPROPERTY('fred', 'passwordhash') as varbinary(256)));--返回0 则证明password不对
    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38705965

    image

    在实例间复制SQL登录名:

    假设你须要迁移server,那么不能简单地在新server上创建同样的帐号password就完事。有些应用须要使用SID来做验证,而每一个帐号的SID都不同,从SQL Server 2005開始,提供了一套脚本来实现迁移:http://support.microsoft.com/kb/918992

    除了脚本,还能够用SSIS的【传输登录名任务】来实现。过程例如以下:

    1. 打开SQL Server Data Tools(2012開始更名,之前是BIDS,可是2012之后功能更加强大)。创建一个新项目。选择Business Intelligence组。然后点击Integration Services Project。输入一个项目名,点击【确定】:

    image

    2. 查找【传输登录名任务】:

    image

     原文出处:http://blog.csdn.net/dba_huangzj/article/details/38705965

    3. 双击图标。打开【传输登录名任务编辑器】:

    image

    4. 在【登录名】页,选择源链接和目标链接:

    image

    5. 在【loginsToTransfer】中选择你要复制的登录名:

      • AllLogins:传输源server上全部SQL Server登录名。
      • SelectedLogins:仅传输存在于【LoginsList】选项中的登录名。
      • AllLoginsFromSelectedDatabases:传输全部映射到定义了【DatabasesList】中数据库的用户的登录名。

    image

    6. 在【IfObjectExists】选项中,定义怎样响应目标server已存在的登录名:

      • FailTask:停止任务并发挥错误
      • Overwrite:覆盖目标server的登录名,假设SID没有复制,会导致用户变成孤立帐号。
      • Skip:跳过。继续其它登录名。

    image

    7. 在【CopySids】选项中。能够选择复制登录并保留同样的SID,这一步建议选择。

    image

    怎样使用SSIS任务。能够參照http://msdn.microsoft.com/zh-cn/library/ms188664.aspx(使用复制数据库向导)

    手动复制password:

    假设须要手动复制password。能够使用CREATE LOGIN命令实现:

    -- 获取password的hash值,语句不须要改变 
    SELECT LOGINPROPERTY('fred', 'passwordhash'); 
    -- 使用上面获取的哈希值创建新登录名。须要手动粘贴hash值 
    CREATE LOGIN fred WITH PASSWORD '粘贴上面获取的hash值' HASHED;


    下一篇:http://blog.csdn.net/dba_huangzj/article/details/38756693

  • 相关阅读:
    TP5 中通过Request获取到的 Action不同的环境,大小写不一样
    正则符号
    ubuntu mysql卸载重装
    ubuntu 多域名配置
    微信小程序-开发入门(一)
    Maven通过profiles多环境配置打包
    GitLab多机备份与恢复操作
    动态增加linux目录大小
    MQ队列及常见操作
    ②将SVN迁移到GitLab-多分支多标签迁移
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7118080.html
Copyright © 2011-2022 走看看