0

私は最近それを尋ねましたが、最初は見つけられませんでした。4つのステップで私はそれをやった.私は別の方法をもっと簡単に学びたい.

最初に、dbo.login テーブルを作成しました (承認された管理者とハッシュ化されたパスワードをそこに入れます)

次に、sp_password_entry プロシージャを作成して、ログイン テーブルに一時パスワードを挿入します。

3 番目に、一時ユーザーのハッシュ化されたパスワードと管理者のハッシュ化されたパスワードを比較する 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