第十二周学习笔记

第十二周学习笔记

登录名与用户名的区别:

1.登录名是指可以使用新建的登录名和密码登录数据库这个程序软件,但不能打开或展开用户自己创建的数据库;

2.用户名是在登录名基础上,为用户自己创建的数据库新加的可查看用户,但要进行增查改删操作仍然需要为该用户添加使用权限。用户名可以与登录名相同,也可以不同。一个数据库可以拥有多个用户,一个用户也可以访问多个数据库。

为数据库添加新的登录名,有两种方式:一:windows身份 二:sqlserver身份

首先,采用windowssa(超级管理员)身份登录本地数据库,展开数据库——安全性——登录名,右键新建登录名,

第十二周学习笔记

 

如上图所示,新建登录名SqlAdm1,选择sqlserver身份验证,设置密码,不勾选强制实施密码策略,确定。

创建完数据库,断开数据库连接,重新登录,使用新建的SqlAdm1sqlserver身份登录。

 

可以发现登录成功,但不能访问自己创建的数据库。

接下来,为数据库创建用户名,并添加使用权限。

先断开数据库连接,使用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图

第十二周学习笔记