原文出处: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

前言:

登录帐号是定义在服务器(实例)级别,并能被授予进行管理任务、连接、访问数据库等权限的帐号。SQL Server安全模型有两个级别:服务器级别和数据库级别。登录帐号必须先创建在服务器级别。如果需要访问数据库,还需要在数据库级别创建一个用户映射到已有的登录名中。

对于从SQL Server 2012引入的部分包含数据库(Partially Contained Databases),允许在服务器级别上没有登录名也可以访问数据库,将会在后面章节中介绍。

实现:

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

2. 输入登录名,可以是SQL Server帐号,也可以是Windows帐号(<机器名 or 域名>\<帐号名>),如果是Windows帐号,可以在【查找】中浏览。

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

3. 如果选择了【SQL Server 身份验证】,可以输入密码和确认密码,在某些情况下可以使用空密码(当然不建议),下面是需要说明的选项:

    • 强制实施密码策略(Enforce password policy):强制使用Windows的密码策略,不勾选这个选项,则可以使用空密码,并且下面两个选项也将关闭。
    • 强制密码过期(Enforce password expiration):根据Windows的密码策略是密码过期。
    • 用户在下次登录时必须更改密码(User must change password at next login):用户在首次使用GUI登录时必须修改密码。

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

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

6. 除了使用SSMS创建,还可以使用T-SQL创建登录,下面是一个例子:

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

原理:

在Windows Server 2008 上的密码策略可以参考文章:http://technet.microsoft.com/en-us/library/cc264456.aspx

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

  • 不能包含出现在登录名中的多于2个连续的字符。
  • 密码长度最少6个字符。
  • 密码需要包含下面4种字符中的最少3种不同类型的字符:大写、小写、数字、特殊符号。

如果使用了Windows用户组作为登录名,可以使用下面语句检查当前登录是否属于某个组的成员:

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

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

更多:

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

当SQL 登录使用了CHECK_POLICY选项后,可能由于某些因素导致帐号被锁定。可以使用下面命令解锁:

--通过重置密码解锁
ALTER LOGIN fred WITH PASSWORD = '新密码' UNLOCK;
-- 不需要重置密码:
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 登录名密码:

可以使用ALTER LOGIN 登录名 WITH PASSWORD=’新密码';来修改SQL 登录的密码。执行这个密码需要具有CONTROL SERVER或者ALTER ANY LOGIN权限(分别对于那个sysadmin或securityadmin固定角色成员)。如果需要修改自己的密码,需要提供旧密码,如:

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

密码是使用不可逆的hash存储,如果想检查密码是否正确,可以使用未公开函数PWDCOMPARE:

USE master
GO
CREATE LOGIN Fred WITH PASSWORD ='Admin!@#123' --创建一个登录名
go
--检查登录名的密码
SELECT PWDCOMPARE('Admin!@#123', CAST(LOGINPROPERTY('fred', 'passwordhash') as varbinary(256)));--返回1 则证明密码正确
SELECT PWDCOMPARE('123', CAST(LOGINPROPERTY('fred', 'passwordhash') as varbinary(256)));--返回0 则证明密码不正确

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

在实例间复制SQL登录名:

如果你需要迁移服务器,那么不能简单地在新服务器上创建相同的帐号密码就完事,有些应用需要使用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。输入一个项目名,点击【确定】:

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

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

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

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

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

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

6. 在【IfObjectExists】选项中,定义如何响应目标服务器已存在的登录名:

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

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

如何使用SSIS任务,可以参照http://msdn.microsoft.com/zh-cn/library/ms188664.aspx(使用复制数据库向导)

手动复制密码:

如果需要手动复制密码,可以使用CREATE LOGIN命令实现:

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

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

Chapter 2 User Authentication, Authorization, and Security(2):创建登录帐号的更多相关文章

  1. Chapter 2 User Authentication, Authorization, and Security(11):在已还原的数据库中修正登录映射错误

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/39496517,专题目录:http://blog.csdn.net/dba_huangzj ...

  2. Chapter 2 User Authentication, Authorization, and Security(10):创建包含数据库

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/39473895,专题目录:http://blog.csdn.net/dba_huangzj ...

  3. Chapter 2 User Authentication, Authorization, and Security(9):防止登录名和用户查看元数据

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/39003679,专题目录:http://blog.csdn.net/dba_huangzj ...

  4. Chapter 2 User Authentication, Authorization, and Security(8):创建映射到登录名的数据库用户

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38944121,专题目录:http://blog.csdn.net/dba_huangzj ...

  5. Chapter 2 User Authentication, Authorization, and Security(4):限制SA帐户管理权限

    原版的:http://blog.csdn.net/dba_huangzj/article/details/38817915,专题文件夹:http://blog.csdn.net/dba_huangzj ...

  6. Chapter 2 User Authentication, Authorization, and Security(3):保server避免暴力袭击

    原版的:http://blog.csdn.net/dba_huangzj/article/details/38756693,专题文件夹:http://blog.csdn.net/dba_huangzj ...

  7. Chapter 2 User Authentication, Authorization, and Security(7):创建和使用用户自定义服务器角色

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38895357,专题目录:http://blog.csdn.net/dba_huangzj ...

  8. Chapter 2 User Authentication, Authorization, and Security(6):服务器权限授予粒度

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38867489,专题目录:http://blog.csdn.net/dba_huangzj ...

  9. Chapter 2 User Authentication, Authorization, and Security(5):使用固定服务器角色

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38844999,专题目录:http://blog.csdn.net/dba_huangzj ...

  10. Chapter 2 User Authentication, Authorization, and Security(4):限制SA帐号的管理权限

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38817915,专题目录:http://blog.csdn.net/dba_huangzj ...

随机推荐

  1. Docker常见仓库Node.js

    Node.js 基本信息 Node.js是基于 JavaScript 的可扩展服务端和网络软件开发平台. 该仓库提供了 Node.js 0.8 ~ 0.11 各个版本的镜像. 使用方法 在项目中创建一 ...

  2. 守护态运行Docker容器

    更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行.此时,可以通过添加 -d 参数来实现. 例如下面的命令会在后台运行容器. $ sudo docker run -d ...

  3. Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/52088039 最近在移植一个 JNI 项目, 比较纠结, A ...

  4. 学习TensorFlow,调用预训练好的网络(Alex, VGG, ResNet etc)

    视觉问题引入深度神经网络后,针对端对端的训练和预测网络,可以看是特征的表达和任务的决策问题(分类,回归等).当我们自己的训练数据量过小时,往往借助牛人已经预训练好的网络进行特征的提取,然后在后面加上自 ...

  5. ROS机器人程序设计(原书第2版)补充资料 (伍) 第五章 计算机视觉

    ROS机器人程序设计(原书第2版)补充资料 (伍) 第五章 计算机视觉 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 计算机视觉这章分为两 ...

  6. Scheme N皇后

    (define (range n) (define (recur n) () '() (cons n (recur (- n ))))) (recur (- n ))) (define (flatte ...

  7. thinkpad彻底消除"触摸键盘"图标

    输入“服务”,进入“查看本地服务”,找到“Touch Keyboard and Handwriting Panel Service”, 将其启动类型改为“禁用”,这样的话重启电脑之后也不会自动启动这触 ...

  8. Spark技术内幕:Shuffle Map Task运算结果的处理

    Shuffle Map Task运算结果的处理 这个结果的处理,分为两部分,一个是在Executor端是如何直接处理Task的结果的:还有就是Driver端,如果在接到Task运行结束的消息时,如何对 ...

  9. Swift中switch强大的模式匹配

    不少人觉得Swift中switch语句和C或C++,乃至ObjC中的差不多,此言大谬! 让本猫带领大家看一下Swift中switch语句模式匹配的威力. 所谓模式匹配就是利用一定模式(比如couple ...

  10. actionbar完全解析(一)

    Action Bar是一种新増的导航栏功能,在Android 3.0之后加入到系统的API当中,它标识了用户当前操作界面的位置,并提供了额外的用户动作.界面导航等功能.使用ActionBar的好处是, ...