SQL Server中的PWDENCRYPT与PWDCOMPARE函数
前幾天有個客戶的網站出問題(不是我們開發的),請我們幫他看,主要的問題是他們的網站會員在進行查詢密碼時,會員收到信的時候在密碼的欄位竟然會出現 System.Binary[] 字樣。而我進去資料庫中查看時,發現該會員資料表中的密碼欄位是 varbinary 格式,而我當然不知道他儲存的是什麼值,進而查看他們資料庫中的 Stored Procedure 對於密碼欄位的操作方法,這才發現他們用來驗證會員是否正確登入的方法是使用 PWDCOMPARE 函數。
由於我沒看過這個函數,便上網去查看看,發現這個函數真的是個迷樣的 SQL 內建 Function,而且在 MSDN, TechNet 上都查不到相關文件,而我在 Google 搜尋 pwdcompare site:microsoft.com 得到的結果也僅僅才 127 筆資料而已,且大多這個關鍵字僅僅出現在論壇中,感覺這個 Function 似乎是微軟刻意不讓他曝光的。
而 PWDENCRYPT 與 PWDCOMPARE 函數剛好是一對兄弟,一個負責加密、一個負責比對,但就是沒有「解密」的函數。意思也就是說,使用 PWDENCRYPT 加密過的資料是無法反解的,類似一種 Hash 處理方法。
而且我還發現,使用 PWDENCRYPT 函數加密同樣的字串資料,每次回應的結果都會不一樣,但是使用 PWDCOMPARE 函數一樣可以對加密過的資料進行比對,以下是簡單的使用方法介紹。
PWDENCRYPT 函數
select pwdencrypt('ok')
執行後的結果:
0x010066E6CDE3C8DE9363BE015AC22966456F230432D6485C6B58
注意:每次執行 select pwdencrypt('ok') 的結果都會不一樣,這是一種對密碼保護的機制,只是我不清楚他的演算法。
PWDCOMPARE 函數
select pwdcompare('ok', 0x010066E6CDE3C8DE9363BE015AC22966456F230432D6485C6B58)
執行後的結果為 1 或 0 而已,1 代表密碼比對成功,0 代表密碼比對失敗。
第一個參數是當初加密時的設定的密碼字串。第二個參數是當時加密後的二進位值。 事實上,SQL Server 本身在進行密碼驗證時,應該也就是用 PWDCOMPARE 函數
在比對的,怎麼說呢?你可以先執行以下 T-SQL 查詢出系統登入帳號的 password_hash 欄位:
SELECT password_hash FROM master.sys.sql_logins WHERE name='sa'
然後再將結果用 PWDCOMPARE 函數驗證一下你設定的 sa 密碼,如果回傳值是 1 就代表密碼正確。
備註:雖然有人說這類 undocumented functions 未來可能隨時被取消或刪除,但我卻認為這一組 Function 應該會長久存在,只是「沒有文件」而已。
我也簡單的測試了一下,這兩個 Function 在 SQL 2000, 2005, 2008 都可以使用,只是我也發現了一些不同的 SQL Server 版本之間在使用這兩個
Function 時的小差異:
1. 使用 PWDENCRYPT 時 SQL 2000 與 SQL 2005/2008 加密過後的 hash 長度不一樣!
2. SQL 2005/2008 加密過的密碼在 SQL 2000 中無法使用 PWDCOMPARE 函數 驗證密碼!
3. SQL 2005 與 SQL 2008 基本上是相容的。
4. SQL 2000 加密過的密碼雖然比較長,但在 SQL 2005/2008 中還是可以使 用 PWDCOMPARE 函數驗證密碼!
要使用這兩個 Function 的人可能要小心的不是 PWDENCRYPT 與 PWDCOMPARE 函數未來會消失,而是要考慮未來的 SQL Server 版本對兩個 Function 的實做是否能相容,目前看來向下相容應該是沒問題,但未來是否會持續向下相容還是很難說,畢竟資料庫中的資料還是會一直沿用下去。
转自:
http://blog.miniasp.com/post/2008/12/SQL-Server-secret-PWDENCRYPT-and-PWDCOMPARE-function.aspx
SQL Server中的PWDENCRYPT与PWDCOMPARE函数的更多相关文章
- SQL_Server_2008定期自动备份详细图解
SQL_Server_2008定期自动备份详细图解 设置自动数据库的定期备份计划. http://wenku.baidu.com/link?url=Tu ...
- C++构造函数,复制构造函数和析构函数专题
链接:http://wenku.baidu.com/view/d9316c0e52ea551810a6872a.html 本文作者:黄邦勇帅本文是学习 C++中的最基本的内容,因此学习 C++就应全部 ...
- 第二天:python的函 数、循环和条件、类
https://uqer.io/community/share/54c8af17f9f06c276f651a54 第一天学习了Python的基本操作,以及几种主要的容器类型,今天学习python的函数 ...
- windows server 2008 r2 启用索引(转)
08r2的“windows search”服务默认是不安装的,要想启用索引执行下列步骤: 1.打开“服务器管理”——选中“角色”——右边选中“添加角色”——勾选“文件服务”. 2. ...
- R语言作为BI中ETL的工具
R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...
- 有一台机器,上面有m个储存空间。然后有n个请求,第i个请求计算时需要占 R[i]个空间,储存计算结果则需要占据O[i]个空间(据O[i]个空间(其中O[i]<R[i])。问怎么安排这n个请求的顺序,使
有一台机器,上面有m个储存空间.然后有n个请求,第i个请求计算时需要占 R[i]个空间,储存计算结果则需要占据O[i]个空间(据O[i]个空间(其中O[i]<R[i]).问怎么安排这n个请求的顺 ...
- Problem Q: C语言习题 计算该日在本年中是第几天
Problem Q: C语言习题 计算该日在本年中是第几天 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 4572 Solved: 2474[Subm ...
- No.2 R语言在生物信息中的应用—模式匹配
目的: 1. 计算自定义模序在所有蛋白质的匹配位点和次数 2. 输出超过阈值的蛋白质序列到Hit_sequences.fasta 3. Hit_sequences.fasta中序列用小写字母,匹配用大 ...
- 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。
题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且 ...
- 概率图模型 基于R语言 这本书中的第一个R语言程序
概率图模型 基于R语言 这本书中的第一个R语言程序 prior <- c(working =0.99,broken =0.01) likelihood <- rbind(working = ...
随机推荐
- Mysql常用命令和常用函数
函数 : FROM_UNIXTIME(unix_timestamp,format) 时间戳转字符串日期格式 格式化规则如下 %M 月名字(January……December) %W 星期名字(Sun ...
- discuz x2 个人资料项排序问题解决方法、添加自定义字段、修改栏目名称和介绍
第一次写文章,希望与人提供方便同时,别误人子弟,自己研究的,大家看不懂只改文件就可以了,如果发现不对的地方请回复或直接通知我,谢谢,本来想在discuz论坛上发的,不懂版规也没时间看版规,怕发错,隔小 ...
- 我的开源框架之Accordion控件
需求: (1)实现手风琴面板控件,支持静态HTML与JSON方式创建控件 (2)支持远程加载数据 (3)支持面板激活.远程加载事件注册 (4)支持动态添加.删除项目 实现图例 客户代码 <div ...
- Oracle中index by binary_integer的作用
如语句:type numbers is table of number index by binary_integer;其作用是,加了”index by binary_integer ”后,num ...
- php读取和保存base64编码的图片内容
<?php header('Content-type:text/html;charset=utf-8'); //读取图片文件,转换成base64编码格式 $image_file = './429 ...
- shell date格式化输出
1- echo `date "+%Y-%m-%d %H:%M:%S"` 2014-11-13 15:06:26 2- echo `date "+%y-%m-%d %H ...
- 【转】生产环境MySQL Server核心参数的配置
⑴ lower_case_table_names ● 推荐理由 GNU/Linux 平台,对数据库.表.存储过程等对象名称大小 ...
- c#实现生产者消费者模式
; } Environment.ExitCode = result; } }}
- IClone地形编辑器结合T4M插件在Unity3D使用
通过IClone编辑器打造的地形,经过T4M插件的转化后,资源占用极少,比在Unity中自己刷出来的地形再通过T4M转化的要小的的多多了,非常适合用在手机上. IClone地形编辑器下载地址: 如果对 ...
- ORA-14400: inserted partition key does not map to any partition
ORA-14400: inserted partition key does not map to any partition 数据库表已经分区,如果插入数据时出现错误提示: ORA-14400: 插 ...