mysql加密t,T-SQL问题解决集锦——数据加解密

a)--短语加密:该过程较为简单,只需要使用EncryptByPassPhrase函数,使用短语加密时,参考的数据航不可以变动,否则解密失败。

b)SELECT *,AddressLine5=ENCRYPTBYPASSPHRASE('P@ssw0rd',CONVERT(varbinary,AddressLine1),AddressID)

c)FROM Person.Address

d)

e)--添加新列存放数据,注意,ENCRYPTBYPASSPHRASE函数返回的是VARBINARY类型

f)ALTER TABLE Person.Address ADD AddressLine5 VARBINARY(256)

g)

h)--将数据更新,过程中使用P@ssw0rd和AddressID数据行当成密码短语

i)

j)UPDATE Person.Address

k)SET AddressLine5=ENCRYPTBYPASSPHRASE('P@ssw0rd',CONVERT(varbinary,AddressLine1),AddressID)

l)

m)SELECT * FROM Person.Address

问题二:如何保护数据库对象定义,避免发生过渡暴露敏感信息?

一般的保护措施是在创建对象时使用WITH ENCRYPTION来把对象加密,这样就无法查看定义。但是问题是对于维护来说就成了问题,而且备份还原时这部分对象是会丢失的。

其中一个解决方法是把定义语句放到对象的【扩展属性】中保存,这样能解决上面的问题。

下面举个例子:

--1、建立已加密的存储过程

USE AdventureWorks

GO

CREATE PROC test

WITH ENCRYPTION

AS

SELECT SUSER_SNAME() ,

USER_NAME()

GO

--2、将上述定义内容去除,利用短语加密搭配EncryptByPassPhrase函数加密,然后在用sys.sp_addextendedproperty存储过程,指定一个扩展名称。

USE AdventureWorks

GO

DECLARE @sql VARCHAR(MAX)

SET @sql = 'CREATE PROC Test WITH ENCRYPTION AS SELECT suer_sname(),user_name() GO'

--3、将内容加密后转换成sql_variant数据类型

DECLARE @bsql SQL_VARIANT

SET @bsql = ( SELECT CONVERT(SQL_VARIANT, ENCRYPTBYPASSPHRASE('P@ssw0rd',

CONVERT(VARCHAR(MAX), @sql)))

)

--4、新增到指定存储过程的扩展属性中:

EXEC sys.sp_addextendedproperty @name = N'test定义', @value = N'System.Byte[]',

@level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'PROCEDURE',

@level1name = N'test'

GO

EXEC sys.sp_addextendedproperty @name = N'代码内容',

@value = N'CREATE PROC Test WITH ENCRYPTION AS SELECT suer_sname(),user_name() GO',

@level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'PROCEDURE',

@level1name = N'test'

GO

--5、还原

DECLARE @pwd VARCHAR(100)= 'P@ssw0rd'

--密码短语

DECLARE @proc VARCHAR(100)= 'test'

--存储过程名

DECLARE @exName NVARCHAR(100)= '代码内容'

--扩充属性名

--将原本结果查询

SELECT value

FROM sys.all_objects AS sp

INNER JOIN sys.extended_properties AS P ON P.major_id = sp.object_id

AND P.minor_id = 0

AND P.class = 1

WHERE ( P.name = @exName )

AND ( ( sp.type = N'p'

OR sp.type = N'rf'

OR sp.type = 'pc'

)

AND ( sp.name = @proc

AND SCHEMA_NAME(sp.schema_id) = N'dbo'

)

)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL数据库可以使用AES_ENCRYPT和AES_DECRYPT函数来对敏感数据进行加密和解密。对于加密,可以使用以下语法: SELECT HEX(AES_ENCRYPT('data','sec_key')); 其中,'data'是要加密数据,'sec_key'是密钥。该函数会将数据加密并以十六进制字符串的形式返回。 而要对加密后的数据进行解密,可以使用以下语法: SELECT AES_DECRYPT(UNHEX('加密后的十六进制字符串'),'sec_key'); 其中,'加密后的十六进制字符串'是通过AES_ENCRYPT函数得到的加密后的数据的十六进制表示形式,'sec_key'是与加密时使用的密钥相同的密钥。该函数会将加密后的数据解密并返回原始数据。 以上是MySQL数据库中对敏感数据进行加密和解密的基本方法。使用这些函数可以有效保护敏感数据的安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [mySQL数据加密与解密](https://blog.csdn.net/weixin_60414376/article/details/125086720)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [MySQL数据库对敏感数据加密及解密的实现方式](https://download.csdn.net/download/weixin_38652270/12822975)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值