مدیریت سرویس sentry
سنتری سرویسی متنباز است که برای ردیابی خطاها طراحی شده و به توسعهدهندگان اجازه میدهد تا در سریعترین زمان ممکن خطاها را شناسایی و آنها را برطرف کنند. این سرویس طوری طراحی شده که توسعهدهندگان میتوانند لیستی از تمام خطاهای رخداده در نسخه های مختلف نرمافزاری که تولید کردهاند را در اختیار داشته باشند. در این مقاله قصد داریم نحوه مدیریت سرویس sentry را به شما آموزش دهیم.
واژهشناسی یا Terminology
بهتر است قبل از اینکه مراحل کار با این سرویس را آموزش دهیم شما را با اصطلاحات و واژههای تخصصی در این ابزار آشنا کنیم.
Object
اولین اصطلاحی که در این بخش با آن آشنا میشویم Object (اشیا) است. اشیا در واقع موجودیتهای این سرویس هستند که توسط مجوزها و قوانین از آنها محافظت میشود. Objectهایی که در نسخه فعلی این ابزار برای مدیریت سرویس sentry در اختیار توسعهدهندگان قرار گرفته است عبارتاند از:
- Server
- Database
- Table
- URI
- Collection
- Config
Role
Roleها مجموعه قوانینی هستند که توسعهدهنده برای ایجاد دسترسیهای مختلف به نقشها از آن استفاده میکند.
Privilage
Privilage همان دسترسی(امتیاز) است که به نقشهای مختلف داده میشود تا دسترسی به یک Object را کنترل کنند. ابزار سنتری به شما اجازه می دهد تا با استفاده از دستور SELECT امتیازی را به یک ستون اختصاص دهید.
- Privilageها را فقط میتوانید به Hive و Impala اختصاص دهید.
در جدول زیر میتوانید انواع Objectها (اشیا) و Privilage(امتیازات) که میتوان به آن اختصاص داد را مشاهده کنید.
Privilege | Object |
---|---|
ALL | SERVER, TABLE, DB, URI |
CREATE | SERVER, DATABASE |
INSERT | SERVER, DB, TABLE |
REFRESH (Impala only) | SERVER, DATABASE, TABLE |
SELECT | SERVER, DB, TABLE, COLUMN |
USER
User یا کاربر، موجودی است که توسعهدهندگان توسط زیرسیستم های احراز هویت اجازه دسترسی به سرویسهای مختلف را به آنها می دهند. این موجودیت میتواند به وسیله یک Kerberos Principale ، LDAP(Userid) ، Articraft یا هر سیستم احراز هویت دیگری که امکان مدیریت سرویس sentry با آن وجود داشته باشد ایجاد شود.
Group
گروهها اتصال سیستمهای احراز هویت را با سیستمهای مجوز برقرار میکنند. در واقع گروهها مجموعهای متشکل از یک یا چند کاربر هستند که بهوسیله Roleها یک یا چند نقش برای آنها مشخص شده است.
- ابزار سنتری به شما اجازه میدهد تا چندین نقش را به یک گروه اختصاص دهید.
Group Provider
Group Provider ها در واقع وظیفه پیکربندی و عضو کردن کاربرهای مختلف در گروههای مشخص شده را برعهده دارند. سرویس سنتری در نسخه فعلی برای انجام این کار از HDFS استفاده میکند.
مدلهای دسترسی (Privilage) در سرویس سنتری
سنتری برای امتیازدهی از مدل مبتنی بر نقش بر اساس ویژگیهای زیر استفاده میکند.
- به تمام کاربران اجازه اجرای دستوارت show function,desc function و show locks را میدهد.
- به کاربران بر اساس Privilage و سطح دسترسی که به آنها داده شده اجازه دیدن جداول، دیتابیسها، مجموعهها و پیکربندیها را میدهد.
- کاربر باید دسترسیهای لازم روی URI را داشته باشد تا بتواند عملیات HiveQL را در بخش مشخصی اجرا کند. نمونهای از عملیات قابلاجرا عبارت است از: Load,Export و Import
- سنتری کنترل دسترسی در سطح ستون را برای جداول Hive و Impala فراهم میکند. با استفاده از دستور SELECT میتوانید این امتیاز را به ستونهای جدول اختصاص دهید.
- در Beeline شما میتوانید برای اشیائی که وجود ندارند در جدولی خاص دسترسی دلخواه را تعریف کنید. سپس به آن جدول مراجعه کرده و شئ مدنظر را ایجاد کنید.
نکات مهم
- وقتی سرویس سنتری فعال است باید از Beeline برای فراخواندن کوئری Hive استفاده کنید؛ زیرا Hive CLI در این حالت غیرفعال است.
- برای مدیریت سرویس sentry در زمان فعالبودن آن، کاربر باید به دیتابیس دسترسی داشته باشد در غیر این صورت نمیتواند به HiveServer2 متصل شود. به همین دلیل است که فرمان use <database> بهعنوان بخشی از HiveServer2 اجرا میشود و اتصال از کار میافتد.
ایجاد دسترسی
اجازه دهید ایجاد دسترسی را با چند مثال برای شما توضیح دهیم.
بهعنوانمثال برای ایجاد یک نقش در جدول مشتریها و دیتابیس فروش از دستور زیر پیروی میکنیم.
server=server1->db=sales->table=customer->action=Select
برای اختصاصدادن دسترسی نقش Sale_role در ستون id در جدول مشتری از دستور زیر استفاده میکنیم.
sales_read = server=server1->db=sales->table=customers->column=Id->action=select
- نکتهای که باید در ایجاد نقشها رعایت کنید سلسلهمراتب است. بهاینترتیب میتوانید برای هر نقش دسترسیهای مختلف تعریف کنید. در زیر میتوانید نمونهای صحیح را مشاهده کنید.
- sales_reporting = \
- server=server1->db=sales->table=customer->action=Select, \
- server=server1->db=sales->table=items->action=Select, \
- server=server1->db=reports->table=sales_insights->action=Insert
مدل مجوز دسترسی برای Hive و Impala
شما میتوانید دسترسیهای مختلفی را برای Objectها در مخزن Hive مشخص کنید. فقط باید سلسهمراتب را در اعطای دسترسیها رعایت کنید. توجه داشته باشید اگر شیئی که دسترسی به آن میدهید دارای زیرمجموعه باشد تمام زیرمجموعهها نیز این دسترسی را به ارث میبرند.
حالتی دیگر نیز وجود دارد که در آن کاربر شماره 1 به دیتابیس 1 و 2 دسترسی دارد؛ اما کاربر شماره 2 فقط به دیتابیس 1 دسترسی دارد. اگر کاربر شماره یک، View ای در دیتابیس یک بر اساس دیتابیس 2 ایجاد کند، کاربر شماره 2 میتواند همه داده های موجود در دیتابیس 2 را از طریق دیتابیس 1 مشاهده کند.
در جدول زیر میتوانید سلسلهمراتب یک شیء را مشاهده کنید.
Server
URI
Database
Table
Partition
Columns
View
جمع بندی
سنتری یکی از سرویسهای قوی برای ردیابی خطا است. به همین دلیل بسیاری از توسعهدهندگان از آن استفاده میکنند. در این مقاله نحوه مدیریت سرویس sentry، مدلهای دسترسی و نحوه ایجاد آن را بررسی کردیم تا سؤال و ابهامی در این زمینه ایجاد نشود.