标签: encryption

在数据库中存储护照号码

我们正在为一家希望能够将旅客信息输入在线数据库的旅游公司开发旅行/旅游应用程序。

在数据库中存储护照号码是否有任何安全最佳实践?应该加密吗?

best-practices storage encryption

5
推荐指数
1
解决办法
2980
查看次数

使用主密钥恢复数据库并以纯文本形式存储密码

我们有一个(SQL 代理)作业,它每晚备份我们的生产数据库(并恢复到测试数据库服务器),并且我们正在为表中的某些列添加加密。我创建了一个主密钥并将其绑定到服务主密钥:

Create MASTER KEY Encryption By Password = 'MyReallyStrongPW'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY CLOSE MASTER KEY
Run Code Online (Sandbox Code Playgroud)

我还创建了我的证书:

CREATE CERTIFICATE [My_Cert] With Subject = 'My Certificate'
CREATE SYMMETRIC KEY My_Symm_Key WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE [MY_Cert];
Run Code Online (Sandbox Code Playgroud)

同一个账号

域\MyBigSqlAccount

正在运行 sql (prod & test) 的两个实例。

能够看到数据(在测试中)的唯一方法是运行这个:

OPEN MASTER KEY DECRYPTION BY PASSWORD = 'MyReallyStringPW'

ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY CLOSE MASTER KEY
Run Code Online (Sandbox Code Playgroud)

然后这将起作用:

OPEN SYMMETRIC KEY My_Symm_Key DECRYPTION BY CERTIFICATE …
Run Code Online (Sandbox Code Playgroud)

sql-server encryption

5
推荐指数
1
解决办法
751
查看次数

职责分离 - DBA 能否在没有 TDE 加密密钥的情况下修补或升级 SQL Server 2008 R2 DB?

在修补或升级 TDE 加密数据库时,是否应该考虑任何注意事项?在职责分离的情况下,执行补丁或升级过程的人员是否需要访问 TDE 加密数据库的密钥或证书,或者可以在没有密钥的情况下修补数据库。答案很重要,因为我们是一家合法商店,希望应用程序管理员加密数据库并将数据库维护功能外包给 dba,以便在无法访问“应用程序数据”的情况下修补和升级数据库。你能解释一下吗?

sql-server encryption upgrade transparent-data-encryption

5
推荐指数
1
解决办法
380
查看次数

SQL Server 端到端加密选项

我熟悉 SQL Server 的数据库加密选项,例如 TDE,并确保正确加密和保护备份/备份位置。

我正在为一个新客户做一些工作,他要求我详细说明端到端加密的选项,换句话说,以确保从数据库服务器发送到应用程序服务器的数据在途中保持加密并且无法被拦截(或者更确切地说,解释) 通过任何类型的数据包监控。

我知道使用 SSL 证书来加密与数据库的连接,尽管我很少配置它。我真的不知道这是否是端到端加密的合适选项,因为这肯定不能单独使用 SQL Server 进行配置?

在我看来,应用程序端或网络路由上必须有一些东西可以实现这样的端到端加密?

我对网络安全的了解基本上仅限于防火墙规则和一般路由,因此我正在寻找可供我进一步研究或付诸实践的选项。

我担心这个问题会被关闭,因为它是基于意见的,所以我真的要求在 SQL Server 本身(或在 DBA 的职权范围内)提供可靠的选项来配置端到端的数据加密。

sql-server encryption sql-server-2014 sql-server-2016

5
推荐指数
1
解决办法
5254
查看次数

是否可以使用密码证书加密来创建加密备份?

我已通过密码证书加密,我想将其用于备份加密。问题是我无法使用证书(在 T-SQL 语句或维护计划中),因为我无法打开它 - 似乎没有OPEN CERTIFICATE命令。

我希望通过密码加密证书,因为我们的目标是只有一个用户负责在 SQL Server 实例中创建/插入证书。没有其他人能够导出证书并恢复加密的备份。

是否有可能,或者为了加密备份,我必须始终使用数据库主密钥加密证书?

sql-server backup encryption sql-server-2016 sql-server-2017

5
推荐指数
1
解决办法
408
查看次数

Ola Hallengren:加密,但验证?

我已经使用 Ola Hallengren 的脚本几年了,最近升级到 MSSQL2017 允许我开始测试加密备份。在有人问之前:是的,主密钥和加密证书已备份并存储在我们的密码管理器中。

我遇到了以下参数组合的问题:

EXECUTE [OlaHallengren].[DatabaseBackup]
     @Databases = 'SYSTEM_DATABASES'
    ,@Directory = N'\\<SHARE>\SQLBackup\Daily'
    ,@BackupType = 'FULL'
    ,@Verify = 'Y'
    ,@CheckSum = 'Y'
    ,@Encrypt = 'Y'
    ,@EncryptionAlgorithm = 'AES_256'
    ,@ServerCertificate = 'DBBackupEncryptCert<SERVERNAME>'
    ,@LogToTable = 'Y'
Run Code Online (Sandbox Code Playgroud)

备份运行良好,但验证没有:

Command: RESTORE VERIFYONLY FROM DISK = N'\\<SHARE>\SQLBackup\Daily\<SERVER>\master\FULL\...
Process Exit Code 1.
The step failed.
Run Code Online (Sandbox Code Playgroud)

Ola Hallengren 的脚本无法打开主密钥似乎是一个问题,因为这不起作用:

RESTORE VERIFYONLY FROM DISK = N'\\<SHARE>\SQLBackup\Daily\<SERVER>\master\FULL\<SERVER>_master_FULL_<DATE>_<TIME>.bak'
Run Code Online (Sandbox Code Playgroud)

但这确实:

use master;
OPEN MASTER KEY DECRYPTION BY PASSWORD = '<PASSWORD>';

RESTORE VERIFYONLY FROM DISK = N'\\<SHARE>\SQLBackup\Daily\<SERVER>\master\FULL\<SERVER>_master_FULL_<DATE>_<TIME>.bak'

CLOSE MASTER KEY …
Run Code Online (Sandbox Code Playgroud)

sql-server backup encryption ola-hallengren sql-server-2017

5
推荐指数
1
解决办法
267
查看次数

如何迁移具有数据库主密钥和加密证书的数据库

大家早上好。

我对这个有点难住了。我们有一个数据库,我们对表中的一列进行了加密。这是我创建的主密钥以及证书和对称密钥。我需要将此数据库迁移到另一个 SQL 实例,但迁移数据库后,我无法解密信息。

帮助?

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'omitted';

CREATE CERTIFICATE SecureLoginPasswords  
   WITH SUBJECT = 'SecureLogin Customer Passwords for Website';  
GO  


CREATE SYMMETRIC KEY SSN_Key_01  
    WITH ALGORITHM = AES_256  
    ENCRYPTION BY CERTIFICATE SecureLoginPasswords;  
GO  
Run Code Online (Sandbox Code Playgroud)

sql-server encryption

5
推荐指数
2
解决办法
7840
查看次数

通过删除和重新创建相同的名称来更改证书+密钥算法

我们有一种情况,使用TRIPLE_DES. 这用于加密密码列,并由大约十个存储过程使用(使用这些与OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE MyCertificate01;

我想用AES_192. 但是,如果可能,我宁愿避免编辑存储过程。

我写了以下例程:

  1. 将密码列解密为纯文本字段
  2. 删除现有的密钥和证书
  3. 创建一个与上面同名的新证书和密钥
  4. 使用新的证书/密钥重新加密纯文本列

我的问题是,对于训练有素的眼睛,这里是否有任何事情会引起警钟,特别是因为旧名称和新名称相同,并且这些名称是在存储过程中使用的?

我已经测试了代码并且它有效,但是我缺乏加密经验和今天的信息过载剂量让我非常紧张,因此请求专业知识......

-- Decrypt data

ALTER TABLE [dbo].[tbl_Users] ADD PasswordClear nvarchar(250) NULL;
GO

OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE MyCertificate01;
 UPDATE [tbl_Users] SET PasswordClear = CONVERT(nvarchar(250), DECRYPTBYKEY(PasswordEnc))
CLOSE SYMMETRIC KEY SSN_Key_01;
GO

-- Drop old encryption

ALTER TABLE [dbo].[tbl_Users] DROP COLUMN PasswordEnc;
GO

DROP SYMMETRIC KEY SSN_Key_01;
GO

DROP CERTIFICATE [MyCertificate01];
GO


-- Create new certificate …
Run Code Online (Sandbox Code Playgroud)

sql-server encryption sql-server-2012 certificate symmetric-key

5
推荐指数
1
解决办法
443
查看次数

如何在 PostgreSQL 中使用 aes-256-gcm 加密来加密列?

作为数据库点人员,我需要对表中任何位置的 SSN 号码进行加密。我们使用 PostgreSQL。我的应用程序同行要求我们使用 AES-256-GCM 加密算法。但是,我不太确定如何在 postgresql 中应用它。

经过谷歌搜索后,我可以使用这两种 AES 方法之一进行加密:

1.

UPDATE ssnTable
   SET encrypted_ssn = encrypt(encrypted_ssn::bytea, 'mykey', 'aes')`
Run Code Online (Sandbox Code Playgroud)

2.

UPDATE ssnTable
   SET encrypted_ssn = pgp_sym_encrypt(encrypted_ssn, 'mykey', 'compress-algo=1, cipher-algo=aes256')
Run Code Online (Sandbox Code Playgroud)

以上都没有专门使用“aes-256-gcm”算法,这正是我被要求使用的算法。关于如何在 PostgreSQL 的列上使用这个算法有什么想法吗?

postgresql encryption

5
推荐指数
1
解决办法
1837
查看次数

加密存储过程正在加密计划缓存查询计划

在查询与存储过程加密相关的计划缓存时,我遇到了一个非常奇怪的问题。但是,查询加密计划缓存的是存储过程,而不是计划缓存本身中的查询。让我解释...

下面的过程只是在计划缓存中搜索匹配的字符串并输出查询计划(最后一列)。

    ALTER PROCEDURE spQueryPlanCache @textstring nvarchar(max)
    AS
    BEGIN
        SELECT 
                databases.name,
            dm_exec_sql_text.text AS TSQL_Text,
            dm_exec_query_stats.creation_time, 
            dm_exec_query_stats.execution_count,
            dm_exec_query_stats.total_worker_time AS total_cpu_time,
            dm_exec_query_stats.total_elapsed_time, 
            dm_exec_query_stats.total_logical_reads, 
            dm_exec_query_stats.total_physical_reads, 
            dm_exec_query_plan.query_plan
        FROM sys.dm_exec_query_stats 
        CROSS APPLY sys.dm_exec_sql_text(dm_exec_query_stats.plan_handle)
        CROSS APPLY sys.dm_exec_query_plan(dm_exec_query_stats.plan_handle)
        INNER JOIN sys.databases
        ON dm_exec_sql_text.dbid = databases.database_id
        WHERE dm_exec_sql_text.text LIKE @textstring
        
    END
Run Code Online (Sandbox Code Playgroud)

这是最后一列中输出的计划 XML 的示例:

    ALTER PROCEDURE spQueryPlanCache @textstring nvarchar(max)
    AS
    BEGIN
        SELECT 
                databases.name,
            dm_exec_sql_text.text AS TSQL_Text,
            dm_exec_query_stats.creation_time, 
            dm_exec_query_stats.execution_count,
            dm_exec_query_stats.total_worker_time AS total_cpu_time,
            dm_exec_query_stats.total_elapsed_time, 
            dm_exec_query_stats.total_logical_reads, 
            dm_exec_query_stats.total_physical_reads, 
            dm_exec_query_plan.query_plan
        FROM sys.dm_exec_query_stats 
        CROSS APPLY sys.dm_exec_sql_text(dm_exec_query_stats.plan_handle)
        CROSS APPLY sys.dm_exec_query_plan(dm_exec_query_stats.plan_handle)
        INNER JOIN sys.databases …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures encryption

5
推荐指数
1
解决办法
270
查看次数