在SQL Server 2008中加密数据库表

时间:2011-12-08 06:19:40

标签: sql sql-server sql-server-2008 encryption sql-server-2008-r2

我在SQL Server 2008中使用数据库的Windows应用程序。

我不希望用户看到数据库表。

如何在我的数据库中加密表?

3 个答案:

答案 0 :(得分:7)

这里有不同的选择。

  • 您可以对数据使用对称加密:

    CREATE TABLE销售(    ... )

创建对称密钥:

CREATE CERTIFICATE cert_sales WITH SUBJECT = N'Sales certificate',
START_DATE = N'2009-01-01', EXPIRY_DATE = N'2018-12-31';

CREATE SYMMETRIC KEY symkey_sales WITH ALGORITHM = AES_256 
ENCRYPTION BY CERTIFICATE cert_sales

加密数据:

TRUNCATE TABLE sales;
OPEN SYMMETRIC KEY symkey_sales DECRYPTION BY CERTIFICATE cert_sales;
INSERT INTO sales() SELECT a, ENCRYPTBYKEY(Key_Guid(N'symkey_sales'), B) FROM T2;
CLOSE SYMMETRIC KEY symkey_sales;

解密数据:

OPEN SYMMETRIC KEY symkey_sales DECRYPTION BY CERTIFICATE cert_sales;
SELECT a, CAST(DecryptByKey(B) as nvarchar(100)) FROM sales;
CLOSE SYMMETRIC KEY symkey_sales;
  • 您可以对数据使用非对称加密
  • 您可以使用 Transparrent Data Encryption 加密所有数据库文件:

创建主密钥:

USE master
go
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My$Strong$Password$123'

创建证书:

CREATE CERTIFICATE DEK_EncCert WITH SUBJECT = 'DEK Encryption Certificate'

创建DEK:

USE MySecretDB
go
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE DEK_EncCert

启用加密:

ALTER DATABASE MySecretDB SET ENCRYPTION ON
  • 您可以使用BitLocker - 完整卷加密

答案 1 :(得分:3)

加密无济于事 - SQL Server级加密会对文件进行加密。登录后数据可见。

唯一合适的解决方案称为“编程”。基本上是客户端/服务器,没有用户连接到数据库。

或者,您可以使用表上的权限+应用程序密码来提升应用程序(而不是用户)的权限,但这也是不安全的(因为您必须将密码放在某处)。

答案 2 :(得分:-1)

如果您没有授予他们SELECT权限,用户将看不到表的内容。这意味着它们不应该作为dbo组的成员连接。而是为各种用户安全组创建一个或多个组,并为您希望他们访问这些组的数据库对象分配权限。

请注意,如果您有一组将被集体授权给一个或多个用户组的对象,则可以在单独的架构中创建这些组,然后授予用户组访问权限的权限。整个架构。这使得在将数据库对象添加到模式时允许一次性事务。