Metabase

مجوزهای جعل هویت

این صفحه سطح مجوز View data به نام Impersonation را پوشش می‌دهد.

دسترسی جعل هویت به ادمین‌ها امکان می‌دهد مجوزهای View data را به نقش‌ها در پایگاه داده شما "برون‌سپاری" کنند. ادمین‌ها می‌توانند ویژگی‌های کاربر را با نقش‌های تعریف‌شده در پایگاه داده و مجوزهای آن‌ها مرتبط کنند. اگر کسی در گروهی با مجوز View data تنظیم‌شده به Impersonation باشد، آن شخص قادر خواهد بود داده را مشاهده و کوئری کند بر اساس مجوزهای اعطا شده به نقش مشخص‌شده توسط ویژگی کاربر آن‌ها.

پایگاه‌داده‌هایی که از جعل هویت پشتیبانی می‌کنند

فعلاً، دسترسی جعل هویت فقط برای پایگاه‌داده‌های زیر در دسترس است:

  • ClickHouse
  • MySQL
  • PostgreSQL. اگر از viewها در PostgresSQL استفاده می‌کنید، سیاست‌های امنیت سطح ردیف روی viewها فقط در نسخه‌های Postgres 15 و بالاتر کار می‌کنند.
  • Redshift
  • Snowflake
  • SQL Server.

اگر می‌خواهید اتصال‌های پایگاه داده را بسته به اینکه چه کسی وارد شده است تغییر دهید، به مسیریابی پایگاه داده مراجعه کنید.

جعل هویت در مقابل امنیت ردیف و ستون

جعل هویت مجوزها را برای سؤال‌های نوشته‌شده در هر دو ویرایشگر SQL و query builder تنظیم می‌کند

جعل هویت در سطح پایگاه داده عمل می‌کند. در یک موتور پایگاه داده، تنظیم نقش قبل از اجرای کوئری می‌تواند نتایج کوئری را تغییر دهد، چون نقش مجوزهایی را تعریف می‌کند که پایگاه داده شما باید هنگام اجرای عبارات استفاده کند.

امنیت ردیف و ستون فقط مجوزها را برای سؤال‌های query builder تنظیم می‌کند

امنیت ردیف و ستون در سطح متابیس عمل می‌کند. چون متابیس نمی‌تواند کوئری‌های SQL را parse کند تا بفهمد چه داده‌ای افراد مجاز به مشاهده هستند، امنیت ردیف و ستون فقط برای سؤال‌های ساخته‌شده در query builder اعمال می‌شود (جایی که متابیس می‌تواند کوئری‌ها را تفسیر کند).

مثال مورد استفاده برای جعل هویت

فرض کنید یک جدول People داریم که شامل ردیف‌هایی از حساب‌ها از همه 50 ایالت ایالات متحده است. فرض کنید می‌خواهید تیم فروش Vermont شما:

  • بتوانند سؤال‌ها را با استفاده از هر دو query builder و ویرایشگر SQL native بپرسند.
  • فقط بتوانند حساب‌های مشتری در جدول People که در Vermont زندگی می‌کنند را مشاهده کنند.

ابتدا، مجوزها را در پایگاه داده خود با ایجاد یک نقش با یک policy تنظیم می‌کنید. سپس در متابیس، دسترسی داده به آن پایگاه داده را به Impersonation تنظیم می‌کنید، تا وقتی افراد کوئری‌ها را روی آن پایگاه داده اجرا می‌کنند، متابیس از آن نقش برای محدود کردن داده‌ای که می‌توانند ببینند استفاده کند.

تنظیم جعل هویت اتصال

برای اینکه دسترسی جعل هویت کار کند، ابتدا باید نقش‌ها را در پایگاه داده خود برای متابیس تنظیم کنید تا جعل هویت کند، سپس متابیس را پیکربندی کنید تا آن نقش‌ها را وقتی افراد داده را مشاهده یا کوئری می‌کنند جعل هویت کند.

تنظیم اتصال پایگاه داده متابیس برای جعل هویت

جعل هویت از نقش‌های پایگاه داده برای اجرای کوئری‌ها روی پایگاه داده شما استفاده می‌کند، اما همچنان نیاز به یک نقش پیش‌فرض است که برای اجرای عملیات مثل همگام‌سازی، اسکن‌ها، و fingerprinting استفاده شود. بنابراین حساب کاربری که متابیس برای اتصال به پایگاه داده شما استفاده می‌کند باید به همه چیز در آن پایگاه داده که هر گروه متابیس ممکن است نیاز به دسترسی داشته باشد دسترسی داشته باشد، چون آن حساب کاربر پایگاه داده چیزی است که متابیس برای همگام‌سازی اطلاعات جدول استفاده می‌کند.

سپس می‌توانید نقش‌هایی در پایگاه داده ایجاد کنید که دسترسی محدودتری به پایگاه داده دارند (مثل امنیت سطح ردیف یا سطح جدول). وقتی نقش از طریق جعل هویت به پایگاه داده ارسال می‌شود، موتور یک زیرمجموعه از داده را برمی‌گرداند، یا کوئری را به‌طور کامل محدود می‌کند.

برای پایگاه‌داده‌های Redshift، حساب کاربری که متابیس برای اتصال به پایگاه داده Redshift شما استفاده می‌کند باید یک superuser باشد، چون متابیس نیاز دارد بتواند دستور SET SESSION AUTHORIZATION را اجرا کند، که فقط می‌تواند توسط یک superuser پایگاه داده اجرا شود.

در پایگاه داده خود، نقش‌ها را تنظیم کنید

در پایگاه داده خود (نه در متابیس):

  1. یک نقش پایگاه داده جدید ایجاد کنید (در Redshift، این یک کاربر جدید خواهد بود).
  2. مجوزهایی را که می‌خواهید کاربران جعل‌هویت‌شده داشته باشند به آن نقش اعطا کنید.

برای دقیقاً نحوهٔ ایجاد یک نقش جدید در پایگاه داده خود و اعطای مجوزها به آن نقش، باید به مستندات پایگاه داده خود مراجعه کنید. همچنین برخی مستندات دربارهٔ کاربران، نقش‌ها، و مجوزها داریم که می‌تواند به شما کمک کند شروع کنید.

به‌عنوان مثال، اگر از PostgreSQL استفاده می‌کنید، SQL زیر یک نقش به نام vermont_sales_team ایجاد می‌کند و فقط به آن نقش اجازه می‌دهد ردیف‌هایی را در جدول people انتخاب کند که مقدار در ستون state VT است (مخفف Vermont):

CREATE ROLE vermont_sales_team;

GRANT
SELECT ON ALL TABLES IN SCHEMA PUBLIC TO vermont_sales_team;


CREATE POLICY vermont ON people
FOR
SELECT TO vermont_sales_team USING (state = 'VT');


ALTER TABLE people ENABLE ROW LEVEL SECURITY;

اتصال‌های Snowflake باید نقش‌های ثانویه را هنگام استفاده از جعل هویت غیرفعال کنند

برای اینکه جعل هویت به‌درستی با پایگاه‌داده‌های Snowflake کار کند، حساب کاربری که متابیس برای اتصال به پایگاه داده Snowflake شما استفاده می‌کند باید نقش‌های ثانویه غیرفعال داشته باشد. می‌توانید نقش‌های ثانویه را با این غیرفعال کنید:

ALTER USER metabase_user SET DEFAULT_SECONDARY_ROLES = ();

اگر نقش‌های ثانویه را غیرفعال نکنید، هر نقش جعل‌هویت‌شده همچنین مجوزهای همه نقش‌های دیگری که به کاربر متابیس اعطا کرده‌اید را دریافت می‌کند.

تنظیم یک گروه متابیس

مجوزها در متابیس، از جمله جعل هویت، توسط گروه‌ها مدیریت می‌شوند، بنابراین باید:

  1. یک گروه جدید ایجاد کنید (یا یکی موجود را انتخاب کنید).
  2. افراد را به گروه اضافه کنید.

ممکن است بخواهید یک کاربر تست ایجاد کنید و آن‌ها را به گروه اضافه کنید تا بعداً تأیید کنید که جعل هویت به‌درستی کار می‌کند.

اختصاص یک ویژگی کاربر به افراد در گروه

برای مرتبط کردن افراد در گروه با نقشی که در پایگاه داده خود ایجاد کردید، از یک ویژگی کاربر استفاده می‌کنید.

یک ویژگی کاربر به افراد در گروه خود اختصاص دهید:

  • کلید ویژگی می‌تواند هر چیزی باشد.
  • مقدار ویژگی باید با نقش پایگاه داده موردنظر برای هر شخص تطبیق داشته باشد.

تنظیم یک ویژگی کاربر برای جعل هویت

به‌عنوان مثال، اگر یک نقش به نام vermont_sales_team در پایگاه داده خود با دسترسی به یک زیرمجموعه از داده مرتبط با تیم فروش Vermont ایجاد کردید (مثل در مثال بالا)، می‌توانید یک ویژگی کاربر به نام db_role (یا هر چیزی که می‌خواهید ویژگی را نام بگذارید) اضافه کنید و مقدار vermont_sales_team را به ویژگی db_role شخص اختصاص دهید.

برخی پایگاه‌داده‌ها حساسیت به حروف را اعمال می‌کنند، بنابراین ممکن است بخواهید مطمئن شوید که مقدار ویژگی و نقش پایگاه داده دقیقاً تطبیق دارند.

افراد در یک گروه می‌توانند مقادیر ویژگی متفاوت داشته باشند، اما باید کلید ویژگی یکسان داشته باشند. به افراد در یک گروه با دسترسی جعل هویت به داده لزوماً مجوزهای یکسان را به‌اشتراک نمی‌گذارند مراجعه کنید.

تنظیم جعل هویت

  1. در متابیس، Cmd/Ctrl + K را بزنید تا command palette باز شود و برای Permissions جستجو کنید، یا مستقیماً به Admin settings > Permissions > Data بروید.

  2. گروهی که می‌خواهید با نقش پایگاه داده ایجادشده مرتبط کنید را انتخاب کنید.

  3. پایگاه داده را برای پیکربندی دسترسی انتخاب کنید.

  4. زیر تنظیم View data برای آن پایگاه داده، Impersonation را انتخاب کنید. این گزینه فقط در صورتی قابل مشاهده خواهد بود که قبلاً یک ویژگی کاربر ایجاد کرده باشید.

    انتخاب مجوزهای جعل‌هویت‌شده

    اگر گروه All Users شما دسترسی مجازتری به این پایگاه داده داشته باشد (مثلاً "Can view")، یک هشدار می‌بینید، چون متابیس به افراد مجازترین دسترسی به داده را در همه گروه‌هایشان می‌دهد. باید دسترسی پایگاه داده را برای گروه All Users مسدود کنید قبل از تنظیم جعل هویت.

  5. از منوی dropdown ویژگی کاربر، ویژگی کاربری که اضافه کردید که نقش موردنظر برای استفاده گروه هنگام کوئری پایگاه داده را نگاشت می‌کند انتخاب کنید.

  6. تغییرات خود را ذخیره کنید.

به خاطر داشته باشید که همچنین "Create queries" را برای گروه و پایگاه داده خود تنظیم کنید. به‌عنوان مثال، اگر می‌خواهید افراد بتوانند SQL بنویسند در حالی که از نقش‌های پایگاه داده جعل‌هویت‌شده استفاده می‌کنند، باید مجوزهای "Create queries" را به "Query builder and native" تنظیم کنید.

تأیید اینکه مجوزهای جعل‌هویت‌شده کار می‌کنند

ادمین‌ها نمی‌توانند از حساب خودشان تأیید کنند که جعل هویت کار می‌کند، بنابراین باید یک کاربر تست ایجاد کنید، آن‌ها را به گروه اضافه کنید و ویژگی‌های کاربر آن‌ها را تنظیم کنید.

برای تأیید اینکه مجوزهای جعل‌هویت‌شده کار می‌کنند:

  • اگر کاربر تست مجوزهای "Create queries" تنظیم‌شده به "Create queries and native" داشته باشد، یک سؤال SQL ایجاد کنید و تأیید کنید که کاربر تست فقط می‌تواند داده درست را ببیند.

به‌عنوان مثال، برای نقش vermont_sales_team از مثال بالا، می‌توانید اجرا کنید:

SELECT * FROM people;

برای تأیید اینکه کاربر تست فقط داده از Vermont را می‌بیند.

  • اگر کاربر تست مجوزهای "Create queries" تنظیم‌شده به "Query builder only" داشته باشد، به Browse data در نوار کناری چپ بروید و تأیید کنید که کاربر فقط می‌تواند جداولی را که به آن‌ها دسترسی دارد ببیند، و فقط داده در آن جداول که

افراد در یک گروه با دسترسی جعل هویت به داده لزوماً مجوزهای یکسان را به‌اشتراک نمی‌گذارند

متابیس از هر نقشی که در ویژگی کاربر برای هر شخص مشخص می‌کنید استفاده می‌کند. مثلاً، اگر ویژگی db_role را برای جعل هویت انتخاب کنید، db_role یک شخص می‌تواند sales باشد، db_role شخص دیگر می‌تواند engineering باشد، یا هر مقدار دیگری که به یک نقش معتبر در پایگاه داده شما نگاشت می‌شود.

استفاده از جعل هویت برای تنظیم دسترسی SQL سطح ردیف

می‌توانید از جعل هویت برای دادن دسترسی ویرایشگر SQL به افراد استفاده کنید، در حالی که دسترسی آن‌ها به داده را بر اساس یک نقش پایگاه داده خاص محدود می‌کنید. و نه فقط دسترسی سطح جدول، بلکه دسترسی سطح ردیف — یا هر طور که دسترسی را برای آن نقش در پایگاه داده خود تعریف می‌کنید. به‌طور مؤثر، می‌توانید از جعل هویت برای تنظیم دسترسی شبیه امنیت ردیف و ستون به داده‌هایتان استفاده کنید، در حالی که به افراد امکان می‌دهید از ویرایشگر SQL برای کوئری آن داده استفاده کنند. تفاوت این است که، به جای تنظیم امنیت ردیف و ستون در متابیس، باید آن امنیت سطح ردیف را از طریق مجوزهای اعطا شده به یک نقش در پایگاه داده خود تنظیم کنید.

اگر در عوض می‌خواهید به یک گروه دسترسی SQL به برخی، اما نه همه، schemaها یا جداول در آن پایگاه داده بدهید، می‌توانید یک نقش اضافی در پایگاه داده خود ایجاد کنید که فقط شامل یک زیرمجموعه از آن جداول است — یا حتی دسترسی سطح ردیف خاص — و سپس از ویژگی جعل هویت متابیس برای مرتبط کردن یک ویژگی کاربر با آن نقش استفاده کنید. اساساً آنچه متابیس انجام می‌دهد این است که ویژگی کاربر را می‌گیرد و آن ویژگی را به‌عنوان یک رشته به یک دستور SET ROLE یا USE ROLE برای پایگاه داده قبل از اینکه متابیس کوئری را اجرا کند ارسال می‌کند.

جعل هویت اتصال برای افراد در گروه Metabase Admins اعمال نمی‌شود، چون مجوزهای مجازتر آن‌ها اولویت دارد.

متابیس به افراد مجازترین دسترسی به داده را در همه گروه‌هایشان می‌دهد

پس اگر یک شخص در دو گروه با مجوزهای متفاوت برای همان پایگاه داده باشد:

  • گروه قرمز با دسترسی جعل‌هویت‌شده که آنچه می‌توانند ببینند را محدود می‌کند.
  • گروه آبی با View data تنظیم‌شده به "Can view" و Create queries تنظیم‌شده به "Query builder and native".

دسترسی مجازتر گروه آبی دسترسی جعل‌هویت‌شده را override می‌کند.

ادمین‌ها تأثیرات جعل هویت را نمی‌بینند

ادمین‌ها هرگز تأثیرات جعل هویت را نمی‌بینند، چون مجوزهای آن‌ها مجوزهای هر گروه دیگری که عضو آن هستند را override می‌کند.

گروه پیش‌فرض Administrators متابیس دسترسی "Can view" به همه پایگاه‌داده‌ها دارد، و متابیس از مجازترین دسترسی برای هر شخص در چندین گروه استفاده می‌کند، بنابراین هر ادمینی دسترسی "Can view" — نه "Impersonated" — به پایگاه داده خواهد داشت.

برای تست جعل هویت، یک کاربر تست ایجاد کنید، یک ویژگی کاربر با نقش پایگاه داده به آن‌ها اختصاص دهید، و آن‌ها را به گروه جعل‌هویت‌شده اضافه کنید. سپس، به‌عنوان کاربر تست وارد شوید و دسترسی داده را تأیید کنید.