私の典型的なアプリケーションでは、ユーザーはaspxページ内のボタンをクリックし、C#ビジネスオブジェクトを呼び出してからストアドプロシージャを実行します。コールスタック内のどこでロールチェックが行われるべきですか?
ロールチェックは、スタックの最上部、スタックの最下部、またはすべてのレベルで行う必要がありますか?悪意のあるユーザーが1つのメソッドを呼び出せば、任意のメソッドを呼び出すことができます。そのため、効果的なセキュリティを実現するには、すべてのメソッドをチェックする必要があります(書き込みには余分なコードがたくさんあります)。
Page_Load()
{
if(p.IsInRole("Managers")) //or equivalent attribute
{
AddAccount.Visible =true;
}
}
AddAccount_OnClick()
{
if(p.IsInRole("Managers")) //or equivalent attribute
{
//Add the account
Account.Add(...); //and maybe another role check...
}
}
-- TSQL doesn't understand .NET authorization, this call is in a 'trusted' subsystem
create proc Add_Account @user, @account_name
If @user in (Select user from role_table where role='manager')
-- Add the account