私は最近それを尋ねましたが、最初は見つけられませんでした。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
「削除は許可されています」と表示され、行が削除され、ログインテーブルから挿入されたパスワードも削除されます
うまく機能しますが、この操作のためのより便利で簡単なコードはありますか? よろしくお願いします!