第十二周学习笔记
第十二周学习笔记
登录名与用户名的区别:
1.登录名是指可以使用新建的登录名和密码登录数据库这个程序软件,但不能打开或展开用户自己创建的数据库;
2.用户名是在登录名基础上,为用户自己创建的数据库新加的可查看用户,但要进行增查改删操作仍然需要为该用户添加使用权限。用户名可以与登录名相同,也可以不同。一个数据库可以拥有多个用户,一个用户也可以访问多个数据库。
为数据库添加新的登录名,有两种方式:一:windows身份 二:sqlserver身份
首先,采用windows或sa(超级管理员)身份登录本地数据库,展开数据库——安全性——登录名,右键新建登录名,
如上图所示,新建登录名“SqlAdm1”,选择sqlserver身份验证,设置密码,不勾选强制实施密码策略,确定。
创建完数据库,断开数据库连接,重新登录,使用新建的SqlAdm1的sqlserver身份登录。
可以发现登录成功,但不能访问自己创建的数据库。
接下来,为数据库创建用户名,并添加使用权限。
先断开数据库连接,使用windows身份或sa登录数据库;
将前面创建的登录账号jingyan映射到数据库,在数据库中新建一个DBuser1数据库用户。步骤如下:先以Windows身份验证或者以超级用户身份登录(如sa),在【对象资源管理器】窗口->【数据库】->CollegeDB数据库->【安全性】->【用户】->结点单击右键,选择【新建用户】命令,如下图所示:
然后退出,重新启动,就可以连接到数据库了。创建数据库用户是为了可以创建角色,将角色的权限给用户。这里不细讲,在这里主要讲的是如何新建数据库账户。
加密
1、加密一个数据库中的表的信息
2、建master Key:
CREATEMASTER KEY ENCRYPTION BY PASSWORD = '[email protected]';
用于加密数据库主**的密码
数据库主**是指用于保护证书私钥的对称**以及数据库中存在的非对称**。 当创建主**时,会使用 AES_256 算法以及用户提供的密码对其进行加密。 在 SQL Server 2008和SQL Server 2008 R2 中,不使用 Triple DES 算法。 若要启用主**的自动解密功能,将使用服务主**对该主**的副本进行加密,并将副本存储在数据库和 master 中。 通常,每当主**更改时,便会在不进行提示的情况下更新存储在master 中的副本。 可以使用 ALTER MASTER KEY 的 DROP ENCRYPTION BY SERVICE MASTER KEY 选项对该默认行为进行更改。 必须使用 OPEN MASTER KEY 语句和密码打开未使用服务主**进行加密的主**。
master 中 sys.databases 目录视图的is_master_key_encrypted_by_server 列指示是否使用服务主**对数据库主**进行加密。
可以在 sys.symmetric_keys 目录视图中查看有关数据库主**的信息。
3、建表:Person
CREATETABLE Person
(
ContactID INT PRIMARY KEY,
FirstName NVARCHAR(200),
MiddleName NVARCHAR(200),
LastName NVARCHAR(200),
eFirstName VARBINARY(200),
eMiddleName VARBINARY(200),
eLastName VARBINARY(200),
);
4、建证书:
CREATECERTIFICATE TestCertificate
WITHSUBJECT = 'Adventureworks TestCertificate',EXPIRY_DATE = '10/10/2009';
5、建对称key:
CREATESYMMETRIC KEY TestSymmetricKey
WITHALGORITHM = TRIPLE_DES
ENCRYPTION BY CERTIFICATE TestCertificate;
OPENSYMMETRIC KEY TestSymmetricKey
DECRYPTION BY CERTIFICATE TestCertificate;
6、向表Person中插入加密的数据
INSERT
INTOPerson (ContactID, eFirstName, eMiddleName, eLastName)
values(1,
EncryptByKey(Key_GUID('TestSymmetricKey'), 'eFirstName'),
EncryptByKey(Key_GUID('TestSymmetricKey'), 'eMiddleName'),
EncryptByKey(Key_GUID('TestSymmetricKey'), 'eLastName')
)
7、解密6中的数据
UPDATEPerson
SETFirstName = CONVERT(varchar,DecryptByKey(eFirstName)),
MiddleName =CONVERT(varchar,DecryptByKey(eMiddleName)),
LastName =CONVERT(varchar,DecryptByKey(eLastName));
8、查看解密后的结果
select Cast(DecryptByKey(eFirstName) asVarchar) FROM Person
9、删除以上的结构
DROPTABLE Person;
CLOSESYMMETRIC KEY TestSymmetricKey;
DROPSYMMETRIC KEY TestSymmetricKey;
DROPCERTIFICATE TestCertificate;
DROPMASTER KEY;
PS:EXPIRY_DATE是有效时间,要大于当前时间
这样创建之后我们看到相应的加密数据将会是乱码!
ER图