0

我最近问过,但一开始没找到。在 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

它显示“允许删除”并删除行,还从登录表中删除插入的密码

它工作得很好,但是这个操作有更有用和更简单的代码吗?提前谢谢!!

4

0 回答 0