我最近问过,但一开始没找到。在 4 个步骤中我做到了。我想更容易地学习另一种方法。
首先,创建 dbo.login 表(将授权管理员和哈希密码放入其中)
二、创建sp_password_entry 程序向登录表插入临时密码
第三,创建 func_password_comparison 函数来比较临时用户的哈希密码和管理员的哈希密码
最后,在我的表上创建 tr_delete_control 触发器以指定它是管理员还是其他无权删除的人
这是代码;
----我的桌子---
create table login
(
authorised_name varchar(30) not null,
password varchar(50) not null
)
---我插入的管理员帐户和密码---
insert into dbo.login values('admin',HASHBYTES('md5',convert(varchar(50),'myPassWord')))
---我将临时用户的密码插入登录表的程序---
create procedure sp_password_entry
@pass varchar(30)
as
begin
insert into dbo.login values('temp',HASHBYTES('md5',convert(varchar(50),@pass))
end
---我要检查的功能是他是管理员吗??--
create function func_password_comparison()
returns int
as
begin
declare @admin_pass varchar(50),
@temp_pass varchar(50)
set @admin_pass=(select password from dbo.login where authorised_name='admin')
set @temp_pass=(select password from dbo.login where authorised_name='temp')
if(@admin_pass=@temp_pass)
return 1
return 0
end
---我的触发器来控制允许用户的删除。最后它还会删除插入的临时值和密码---
create trigger tr_delete_control
on dbo.myTable
after delete
as
begin
declare @temp int
set @temp=dbo.func_password_comparison()
if exists(select * from deleted)
begin
if(@temp=1)
begin
print 'delete is permitted'
end
else
begin
raiserror('with the sp_password_entry procedure insert a password or you inserted wrong password',10,1)
rollback
end
delete from dbo.login where authorised_name='temp'
end
else if not exists(select * from deleted)
begin
delete from dbo.login where authorised_name='temp'
end
end
当用户写
sp_password_entry 'wrongPassWord'
delete from dbo.myTable
它显示错误并从登录表中删除插入的密码
或者只是写
delete from dbo.myTable
它显示删除触发器错误。如果他写
sp_password_entry 'myPassWord'
delete from dbo.myTable
它显示“允许删除”并删除行,还从登录表中删除插入的密码
它工作得很好,但是这个操作有更有用和更简单的代码吗?提前谢谢!!