سؤال:
من از function دارم استفاده می کنم و توی بعضی از سایتها یک گزینه ای وجود دارد به نام WITH EXECUTE AS CALLER البته این کد در function قرار دارد و من نمی دونم چه استفاده ای دارد ممنون می شوم شما من را راهنمایی کنید.
پاسخ1:
نحوه اجرای تابع از نظر دسترسی به منابع هست ... caller مقدار پیشفرض هست ... فرضا owner رو اگر بذارید معادل run as admin خودمون در ویندوز هست ... اگر سرچ بزنید داکیومنتش بشکل تفصیلی وجود دارد ...
پاسخ2:
سلام
👈فرض کنید شما یک SP در سیستم انبار محصول طراحی کرده اید که جهت ثبت سفارش استفاده می شود. این SP قرار است توسط یک سیستم دیگری مثلاً سیستم فروش اجرا شود. یعنی کاربر سیستم فروش، در زمان ثبت سفارش، بایستی با ارسال پارامترهایی(تعداد سفارش و ...) این SP رو اجرا کنه.
✍️در چنین شرایطی، با توجه به اینکه در SPثبت سفارش شما لازم است عملیات مختلفی مانند update، Insert و ... در چند جدول دیتابیس انبار انجام دهید لازم است تا یوزر فروش نیز به این جداول دسترسی داشته باشد!!!
👌پس نکته مهم این هست که اگر شما در یک sp،تریگر و ... عملیاتی رو روی آبجکت های دیتابیس انجام میدین، یوزری که اون sp، تریگر و ... رو اجرا می کنه هم باید دسترسی لازم به آبجکت هایی اشاره شده در طول SP و ... رو داشته باشه
کاملاً مشخص است که شما نمی تونید به ازای تک تک یوزرها، و یا سیستم های بیرونی چنین دسترسی هایی رو ایجاد کنید. اینجاس که از دستور with the EXECUTE AS استفاده می کنیم. که از sql2005 معرفی شده است
📎توضیح بیشتر:
در واقع به اضافه کردن with the EXECUTE AS به ابتذای یک SP، تریگر و ... جعل هویت (impersonation ) گفته می شود. یعنی با این کار شما دارین به sql server می گین که هر کسی(هر یوزری) که این Sp و... رو اجرا کرد، شما اینگونه در نظر بگیر که با سطح دسترسی مشخص شده داره عملیات موجود در sp و ... رو انجام می ده.
مثال:
CREATE PROCEDURE dbo.TestProcedure
WITH EXECUTE AS OWNER
بنابراین هر یوزری که TestProcedure رو اجرا کنه، مانند این هست که با سطح دسترسی OWNER داره دستورات داخل sp رو اجرا می کنه.
توجه داشته باشید در صورتیکه این دستور رو اضافه نکنیم بایستی برای تک تک یوزرهایی که نیاز به اجرای SP دارن به کلیه جداول و ... که در طول SP نوشته ایم دسترسی لازم رو بدهیم که این کار صحیح نیست.
مطالعه بیشتر در لینک های زیر:
1️⃣https://www.mssqltips.com/sqlservertip/1227/granting-permission-with-the-execute-as-command-in-sql-server/
2️⃣https://docs.microsoft.com/en-us/sql/t-sql/statements/execute-as-clause-transact-sql
3️⃣https://docs.microsoft.com/en-us/sql/t-sql/statements/execute-as-clause-transact-sql
Post #576
2.01K