我在SQL Server 2008中使用数据库的Windows应用程序。
我不希望用户看到数据库表。
如何在我的数据库中加密表?
答案 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;
创建主密钥:
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
答案 1 :(得分:3)
加密无济于事 - SQL Server级加密会对文件进行加密。登录后数据可见。
唯一合适的解决方案称为“编程”。基本上是客户端/服务器,没有用户连接到数据库。
或者,您可以使用表上的权限+应用程序密码来提升应用程序(而不是用户)的权限,但这也是不安全的(因为您必须将密码放在某处)。
答案 2 :(得分:-1)
如果您没有授予他们SELECT权限,用户将看不到表的内容。这意味着它们不应该作为dbo组的成员连接。而是为各种用户安全组创建一个或多个组,并为您希望他们访问这些组的数据库对象分配权限。
请注意,如果您有一组将被集体授权给一个或多个用户组的对象,则可以在单独的架构中创建这些组,然后授予用户组访问权限的权限。整个架构。这使得在将数据库对象添加到模式时允许一次性事务。