在SQL Server 2008中加密数据库表

5

我有一个使用 SQL Server 2008 数据库的 Windows 应用程序。

我不想让用户看到数据库表。

我该如何对我的数据库中的表进行加密


如果您是管理员,那么您可以通过授予只写权限来限制他们,对吗? - Sai Kalyan Kumar Akshinthala
@SaiKalyanAkshinthala:我不是管理员,而是项目的开发人员。我已经将项目交付给管理员,但我无法让管理员和用户看到数据库表和数据表。 - Ehsan
为什么您不希望他们看到这些表格 - 为什么管理员不能锁定他们的访问权限? - user806549
用户无法访问数据库。该数据库托管在其他地方。为了更安全,我想加密我的数据库表,以便任何人都无法查看它们。 - Ehsan
3个回答

8

您有不同的选择。

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

    CREATE TABLE sales ( ... )

创建对称密钥:

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;
  • 您可以使用非对称加密来保护数据
  • 您可以使用透明数据加密来加密所有数据库文件:

创建主密钥:

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进行完整卷加密。

3

加密无法解决问题 - SQL Server级别的加密只是加密了文件,一旦登录,数据就是可见的。

唯一正确的解决方案被称为“编程”。基本上采用客户端/服务器模式,不让用户直接连接数据库。

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


-1
如果您不授予用户SELECT权限,则他们将无法看到表的内容。这意味着他们不应该作为dbo组的成员连接。相反,为各种安全用户组创建一个或多个组,并将权限分配给您希望他们访问的数据库对象。
请注意,如果您有一组对象将被集体授权给一个或多个用户组,则可以在单独的模式中创建这些组,然后授予用户组访问整个模式的权限。这使得授权成为一次性事务,因为您将数据库对象添加到模式中。

1
这并没有回答问题。安全和加密是两个独立但常常重叠的问题。 - Larry Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接