Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91929605
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Sybase

2008-04-11 11:35:12

  来源:赛迪网    作者:Sybase

下例使用触发器在 user_info 表中对存储口令的列进行加密。 user_info的定义方法如下:

CREATE TABLE user_info (
emp_id INTEGER NOT NULL PRIMARY KEY,
user_name CHAR(80),
user_pwd CHAR(80) )

数据库中添加了两个触发器,以在添加新用户或更新现有用户的口令时,对 user_pwd 列中的值进行加密。

•每当在 user_info_table 中添加新行时,都会触发encrypt_new_user_pwd 触发器。

CREATE TRIGGER encrypt_new_user_pwd
 BEFORE INSERT
 ON user_info
 REFERENCING NEW AS new_pwd
 FOR EACH ROW
 BEGIN
 SET 
new_pwd.user_pwd=ENCRYPT(new_pwd.user_pwd,
'8U3dkA');
 END

•每当在 user_info 表中更新 user_pwd 列时,都会触发encrypt_updated_pwd 触发器。

CREATE TRIGGER encrypt_updated_pwd
 BEFORE UPDATE OF user_pwd
 ON user_info
 REFERENCING NEW AS new_pwd
 FOR EACH ROW
 BEGIN
     SET 
new_pwd.user_pwd=ENCRYPT(new_pwd.user_pwd,
'8U3dkA');
 END

向数据库添加新用户:

INSERT INTO user_info
VALUES ( '1', 'd_williamson', 'abc123')

如果发布 SELECT 语句查看 user_info 表中的信息, user_pwd 列中的值为二进制数据 (口令的加密形式),而不是在 INSERT 语句中指定的值abc123

如果更改此用户的口令:

UPDATE user_info
SET user_pwd='xyz'
WHERE emp_id='1'

就会触发 encrypt_updated_pwd 触发器,且 user_pwd 列中会出现新口令的加密形式。

发布下面的 SQL 语句可以检索初始口令。此语句使用 DECRYPT 函数和加密密钥对数据进行解密,并使用 CAST 函数将值从 LONG BINARY转换为 CHAR 值:

SELECT CAST (DECRYPT(user_pwd, '8U3dkA') AS CHAR(100))
FROM user_info
WHERE emp_id = '1'
阅读(350) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~