开始之前
这是一篇学习Microsoft SQL server的笔记,只记录重点内容,有些地方做了适当省略,如有错误请多多包含.下文使用的Microsoft SQL server为2017版本,如无特殊说明,使用SQL server来代替原来的名称.软件的安装和配置不作详细说明,请自行参照相关文档进行,默认Microsoft SQL server 2017和SSMS已经安装完成.
两个大类
SQL server中,数据库相关的内容可以分为两个大类:对象(或称结构)和数据项.
- 对象:包括数据库对象(如表),也包括SQL server中自带的对象/结构(如登录名).
- 数据项:数据库对象中的基本构成,如表列数据项.
在开始全文之前,应对这两个大类对应的两大类操作有所了解,如下表:
操作类型 | 面向对象 | 面向数据项 |
---|---|---|
新建 | CREATE | INSERT |
删除 | DROP | DELETE |
修改 | ALTER | UPDATE |
查询 | sp_help??? ‘args’/sys.视图名 | SELECT |
在进行CRUD之前,应先考虑它是对象还是数据项,再按照大类去使用相应的语法.
注:CRUD指的是Create/Retrieve/Update/Delete几种基本操作.
登录名
什么是登录名
在SQL server中,登录名的关键字是LOGIN,它是有权限登录到服务器的用户,不同的登录名通常有不同权限.
超级管理员的登录名是sa,该登录名不可更改,sa登录名拥有一切权限.
多种方式创建登录名
你可以从Windows本地账户创建登录名,也可以创建SQL server登录名.
注意登录名是SQL server的对象,按照对应关系应该使用CREATE关键字,例如:
-
从Windows本地账户创建登录名:
-
CREATE LOGIN [AERO15XV8\Connor] --AERO15XV8是计算机名,Connor是计算机中的用户名; FROM WINDOWS; GO
-
创建SQL server登录名:
-
CREATE LOGIN Alex WITH PASSWORD = '12345678'; --为登录名Alex设置密码; GO
经过一番操作,可以在安全性->登录名看到如下效果:
注意两点:
- 从Windows本地账户创建登录名,一定要确保名称格式:[计算机名\用户名].
- 从Windows本地账户创建登录名,不能为其设置密码,它会自动使用Windows本地账户的密码.
- 建立SQL server登录名,一定要设置密码,否则将会出现错误.
- 还可以从证书/Windows域/SID等创建登录名,也可以创建映射到凭据的登录名,这里不再进行介绍.
密码策略
在创建登录名时,往往涉及到密码的问题,于是不得不介绍一下密码策略.Windows密码策略如下:
- 密码不应该包含部分或全部登录名.
- 密码长度至少为6位字符.
- 密码应该包含四类字符中的至少三类:英文大写字母、英文小写字母、阿拉伯数字、非字母非数字.
- 定时更换密码,且新旧密码差异较大.
创建登录名时,将会采用的密码策略如下:
- 当使用Windows本地账户创建登录名时,默认使用的是Windows密码策略.
- 当建立SQL server登录名时,则需使用一些关键字来指明密码策略.
密码策略关键字 | 状态/参数 | 作用 |
---|---|---|
HASHED | 无 | 设置登录名密码的哈希值 |
MUST_CHANGE | 无 | 仅适用SQL server登录名,在首次登录时提示用户设置新密码 |
CHECK_EXPIRATION | ON/OFF | 是否对登录名实施密码过期策略 |
CHECK_POLICY | ON/OFF | 强制使用Windows默认的密码策略 |
以下是创建登录名的一个简单样例:
CREATE LOGIN Temp1
WITH
PASSWORD = '12345678abc'
MUST_CHANGE,
CHECK_EXPIRATION = ON;
GO
CREATE LOGIN Temp2
WITH
PASSWORD = 'ABc123$$',
CHECK_POLICY = ON;
GO
注意:
- 不要使用HASHED创建新登录名,HASHED选项用在服务器数据库迁移中.
- 当CHECK_EXPIRATION设为OFF时,不能使用MUST_CHANGE选项.
维护登录名
修改登录名信息
因为登录名是SQL server的对象,按照对应关系应该使用ALTER关键字,可以修改登录名的名称、密码、权限、密码策略、默认数据库(DEFAULT_DATABASE)、默认语言(DEFAULT_LANGUAGE)等.
具体操作请参见以下简单修改示例:
ALTER LOGIN Temp0
WITH PASSWORD = '12345678abc', --改变登录名Temp的密码;
NAME = Temp0, --改变登录名Temp的名称;
CHECK_POLICY = ON, --改变登录名的密码策略;
DEFAULT_DATABASE = AdventureWorks2017, --改变登录名Temp的默认数据库;
DEFAULT_LANGUAGE = ENGLISH; --改变登录名Temp的默认语言;
GO
禁用/启用登录名
对于一个长久不使用数据库的用户,可以将其登录名禁用,使其没有对数据库的访问权限,示例如下:
ALTER LOGIN Temp1 DISABLE; --禁用登录名Temp1;
GO
ALTER LOGIN Temp1 ENABLE; --启用登录名Temp2;
GO
显然这么做的好处是数据安全:假设某公司员工出差几个月,则为了安全考虑应该禁用其对公司数据库系统访问的权限,直到其回到公司上班再启用.
删除登录名
对于SQL server的对象,删除使用DROP关键字,用法也非常简单,直接DROP+对象类型+登录名即可.
DROP LOGIN Temp0;
GO
注意的点:
- 不同的登录名通常对应不同的数据库管理/使用者,删除可能会导致服务器被"孤立"(无人管理/使用).
- 为了避免上述情况,请尽量对登录名进行信息更改而不是删除操作.
关于登录名就讲到这儿,至于修改登录名权限,会在以后提到的角色中讲.
下一篇: 角色、用户、架构