ការត្រួតពិនិត្យការចូលដំណើរការសម្រាប់អ្នកប្រើនិងតួនាទីនៅក្នុង SQL

សុវត្ថិភាពគឺសំខាន់បំផុតសម្រាប់ អ្នកគ្រប់គ្រងមូលដ្ឋានទិន្នន័យដែល កំពុងស្វែងរកការការពារទំហំជីកាបៃនៃទិន្នន័យអាជីវកម្មសំខាន់ៗរបស់ពួកគេពីភ្នែកអ្នកដែលមិនចង់បាននិងអ្នកដែលនៅខាងក្រៅដែលប៉ុនប៉ងលើសពីអំណាចរបស់ពួកគេ។ ប្រព័ន្ធគ្រប់គ្រងមូលដ្ឋានទិន្នន័យ ទំនាក់ទំនងទាំងអស់ផ្ដល់នូវយន្តការសន្តិសុខដែលអាចកំណត់បានដើម្បីកាត់បន្ថយការគំរាមកំហែងទាំងនេះ។ ពួកវាមានចាប់ពីការការពារពាក្យសម្ងាត់សាមញ្ញដែលផ្ដល់ដោយ Microsoft Access ទៅរចនាសម្ព័ន្ធអ្នកប្រើប្រាស់ / តួនាទីដែលត្រូវបានគាំទ្រដោយមូលដ្ឋានទិន្នន័យទំនាក់ទំនងកម្រិតខ្ពស់ដូចជា Oracle និង Microsoft SQL Server ។ អត្ថបទនេះផ្តោតលើយន្តការសុវត្ថិភាពជាមូលដ្ឋាននៃមូលដ្ឋានទិន្នន័យទាំងអស់ដែលអនុវត្ត ភាសាសំណួររចនាសម្ព័ន្ធ (ឬ SQL ) ។ រួមគ្នាយើងនឹងដើរឆ្លងកាត់ដំណើរការនៃការពង្រឹងការគ្រប់គ្រងទិន្នន័យនិងធានាសុវត្ថិភាពទិន្នន័យរបស់អ្នក។

អ្នកប្រើ

មូលដ្ឋានទិន្នន័យដែលផ្អែកលើម៉ាស៊ីនបម្រើទាំងអស់គាំទ្រគោលគំនិតរបស់អ្នកប្រើដែលស្រដៀងនឹងប្រព័ន្ធប្រតិបត្តិការកុំព្យូទ័រ។ ប្រសិនបើអ្នកស៊ាំជាមួយឋានានុក្រមអ្នកប្រើ / ក្រុមដែលរកឃើញនៅក្នុង Microsoft Windows NT និង Windows 2000 អ្នកនឹងឃើញថាក្រុមអ្នកប្រើ / តួនាទីដែលគាំទ្រដោយ SQL Server និង Oracle ស្រដៀងគ្នាខ្លាំងណាស់។

វាត្រូវបានផ្ដល់អនុសាសន៍យ៉ាងខ្លាំងថាអ្នកបង្កើតគណនីអ្នកប្រើមូលដ្ឋានទិន្នន័យនីមួយៗសម្រាប់មនុស្សម្នាក់ៗដែលនឹងត្រូវចូលប្រើមូលដ្ឋានទិន្នន័យរបស់អ្នក។ វាជាបច្ចេកទេសដែលអាចចែករំលែកគណនីរវាងអ្នកប្រើឬគ្រាន់តែប្រើគណនីអ្នកប្រើម្នាក់សម្រាប់ប្រភេទអ្នកប្រើនីមួយៗដែលត្រូវការចូលទៅក្នុងឃ្លាំងទិន្នន័យរបស់អ្នកប៉ុន្តែខ្ញុំពិតជារារាំងការអនុវត្តនេះដោយមូលហេតុពីរ។ ទីមួយវានឹងលុបបំបាត់ភាពទទួលខុសត្រូវរបស់បុគ្គលម្នាក់ៗប្រសិនបើអ្នកប្រើផ្លាស់ប្តូរទិន្នន័យរបស់អ្នក (ចូរនិយាយដោយខ្លួនឯងនូវការដំឡើង 5,000 ដុល្លារ) អ្នកនឹងមិនអាចតាមដានវាទៅមនុស្សជាក់លាក់បានទេតាមរយៈការប្រើប្រាស់កំណត់ហេតុសវនកម្ម។ លើសពីនេះទៀតប្រសិនបើអ្នកប្រើជាក់លាក់ណាមួយចាកចេញពីអង្គការរបស់អ្នកហើយអ្នកចង់ដកសិទ្ធិរបស់ខ្លួនចេញពីមូលដ្ឋានទិន្នន័យនោះអ្នកនឹងត្រូវបានបង្ខំឱ្យផ្លាស់ប្តូរពាក្យសម្ងាត់ដែលអ្នកប្រើទាំងអស់ពឹងផ្អែក។

វិធីសាស្ត្រសម្រាប់បង្កើតគណនីអ្នកប្រើខុសគ្នាពីវេទិកាទៅជាវេទិកាហើយអ្នកនឹងត្រូវពិគ្រោះជាមួយឯកសារជាក់លាក់របស់ DBMS សម្រាប់នីតិវិធីពិតប្រាកដ។ អ្នកប្រើប្រាស់របស់ Microsoft SQL Server គួរតែស៊ើបអង្កេតការប្រើប្រាស់វិធីសាស្ត្រដែលបានរក្សាទុក sp_adduser ។ អ្នកគ្រប់គ្រងមូលដ្ឋានទិន្នន័យ Oracle នឹងរកឃើញពាក្យ CREATE USER មានប្រយោជន៍។ អ្នកក៏ប្រហែលជាចង់ស៊ើបអង្កេតគ្រោងការណ៍ផ្ទៀងផ្ទាត់ជំនួស។ ឧទាហរណ៍ Microsoft SQL Server គាំទ្រការប្រើប្រាស់ Windows NT Integrated Security ។ នៅក្រោមគ្រោងការណ៍នេះអ្នកប្រើត្រូវបានកំណត់ទៅមូលដ្ឋានទិន្នន័យដោយគណនីអ្នកប្រើ Windows NT និងមិនត្រូវបានទាមទារឱ្យបញ្ចូលលេខសម្គាល់អ្នកប្រើបន្ថែមនិងពាក្យសម្ងាត់ដើម្បីចូលដំណើរការមូលដ្ឋានទិន្នន័យ។ វិធីសាស្រ្តនេះមានប្រជាប្រិយភាពខ្លាំងណាស់ក្នុងចំណោមអ្នកគ្រប់គ្រងប្រព័ន្ធទិន្នន័យពីព្រោះវាផ្លាស់ប្តូរបន្ទុកនៃការគ្រប់គ្រងគណនីទៅកាន់បុគ្គលិករដ្ឋបាលបណ្តាញហើយវាផ្តល់នូវភាពងាយស្រួលនៃការចូលតែមួយទៅអ្នកប្រើចុងក្រោយ។

តួនាទី

ប្រសិនបើអ្នកស្ថិតនៅក្នុងបរិស្ថានដែលមានអ្នកប្រើតូចអ្នកប្រហែលជានឹងឃើញថាការបង្កើតគណនីអ្នកប្រើនិងការអនុញ្ញាតសិទ្ធិដោយផ្ទាល់ទៅពួកគេគឺគ្រប់គ្រាន់សម្រាប់តម្រូវការរបស់អ្នក។ ទោះជាយ៉ាងណាក៏ដោយប្រសិនបើអ្នកមានអ្នកប្រើប្រាស់ច្រើនអ្នកនឹងទំនងជាបន្ទាបខ្លួនដោយបន្ទុកគណនីនិងសិទ្ធិត្រឹមត្រូវ។ ដើម្បីបន្ធូរបន្ថយបន្ទុកនេះមូលដ្ឋានទិន្នន័យទំនាក់ទំនងគាំទ្រគំនិតនៃតួនាទី។ តួនាទីមូលដ្ឋានទិន្នន័យដំណើរការដូចគ្នាទៅនឹងក្រុម Windows NT ដែរ។ គណនីអ្នកប្រើត្រូវបានចាត់តាំងទៅតួនាទីនិងសិទ្ធិត្រូវបានកំណត់ទៅតួនាទីទាំងមូលជាជាងគណនីអ្នកប្រើម្នាក់ៗ។ ឧទាហរណ៍យើងអាចបង្កើតតួនាទី DBA ហើយបន្ទាប់មកបន្ថែមគណនីអ្នកប្រើប្រាស់របស់បុគ្គលិករដ្ឋបាលរបស់យើងទៅតួនាទីនេះ។ នៅពេលយើងបានធ្វើដូច្នេះយើងអាចផ្តល់ការអនុញ្ញាតជាក់លាក់ដល់អ្នកអភិបាលទាំងអស់ (និងអនាគត) ដោយគ្រាន់តែផ្តល់ការអនុញ្ញាតដល់តួនាទី។ ជាថ្មីម្តងទៀតនីតិវិធីសម្រាប់ការបង្កើតតួនាទីខុសគ្នាពីវេទិកាទៅជាវេទិកា។ អ្នកគ្រប់គ្រង MS SQL Server គួរតែធ្វើការស៊ើបអង្កេតអំពីវិធីសាស្ត្ររក្សាទុក sp_addrole ខណៈដែល Oracle DBA គួរប្រើ syntax CREATE ROLE ។

ការផ្តល់ការអនុញ្ញាត

ឥឡូវនេះយើងបានបន្ថែមអ្នកប្រើប្រាស់ក្នុងឃ្លាំងទិន្នន័យរបស់យើងហើយវាជាពេលវេលាដើម្បីចាប់ផ្តើមពង្រឹងសន្តិសុខដោយបន្ថែមការអនុញ្ញាត។ ជំហានទីមួយរបស់យើងគឺផ្តល់សិទ្ធិអនុញ្ញាតទិន្នន័យមូលដ្ឋានដល់អ្នកប្រើប្រាស់របស់យើង។ យើងនឹងសម្រេចនេះតាមរយៈការប្រើប្រាស់ SQL GRANT statement ។

នេះជាវាក្យសម្ព័ន្ធនៃសេចក្តីថ្លែងការណ៍:

GRANT <សិទ្ធិ>
[លើ <តារាង>]
ទៅ
[ជាមួយជម្រើសអនុញ្ញាត]

ឥលូវសូមក្រឡេកមើលឃ្លាមួយនេះតាមបន្ទាត់។ បន្ទាត់ទីមួយ GRANT <សិទ្ធិអនុញ្ញាត> អនុញ្ញាតឱ្យយើងបញ្ជាក់ពីសិទ្ធិតារាងជាក់លាក់ដែលយើងផ្តល់ឱ្យ។ ទាំងនេះអាចជាសិទ្ធិក្នុងកម្រិតតារាង (ដូចជា SELECT, INSERT, UPDATE និង DELETE) ឬសិទ្ធិអនុញ្ញាតមូលដ្ឋានទិន្នន័យ (ដូចជា CREATE TABLE, ALTER DATABASE និង GRANT) ។ សិទ្ធិអនុញ្ញាតច្រើនជាងមួយអាចត្រូវបានផ្តល់ក្នុងសេចក្តីថ្លែងការណ៍ GRANT តែមួយប៉ុន្តែសិទ្ធិក្នុងកម្រិតតារាងនិងសិទ្ធិអនុញ្ញាតមូលដ្ឋានទិន្នន័យអាចមិនត្រូវបានបញ្ចូលគ្នានៅក្នុងសេចក្តីថ្លែងការណ៍តែមួយទេ។

បន្ទាត់ទីពីរលើ <តារាង> ត្រូវបានប្រើដើម្បីបញ្ជាក់តារាងដែលរងផលប៉ះពាល់សម្រាប់សិទ្ធិកម្រិតតារាង។ បន្ទាត់នេះត្រូវបានលុបចោលប្រសិនបើយើងផ្តល់សិទ្ធិកម្រិតមូលដ្ឋានទិន្នន័យ។ បន្ទាត់ទីបីបញ្ជាក់អ្នកប្រើឬតួនាទីដែលកំពុងត្រូវបានផ្តល់សិទ្ធិ។

ចុងបញ្ចប់បន្ទាត់ទីបួនដោយមានជម្រើសអនុញ្ញាតគឺជាជំរើស។ ប្រសិនបើបន្ទាត់នេះត្រូវបានបញ្ចូលក្នុងសេចក្តីថ្លែងការណ៍អ្នកប្រើដែលទទួលរងផលប៉ះពាល់ក៏ត្រូវបានអនុញ្ញាតឱ្យផ្តល់ការអនុញ្ញាតដូចគ្នានេះដល់អ្នកប្រើផ្សេងទៀតដែរ។ ចំណាំថា WITH GRANT OPTION មិនអាចបញ្ជាក់នៅពេលសិទ្ធិត្រូវបានកំណត់ទៅតួនាទី។

ឧទាហរណ៍

សូមក្រឡេកមើលគំរូមួយចំនួន។ នៅក្នុងសេណារីយ៉ូដំបូងរបស់យើងយើងទើបតែបានជួលក្រុមអ្នកប្រតិបត្តិការទិន្នន័យ 42 នាក់ដែលនឹងត្រូវបន្ថែមនិងរក្សាទុកកំណត់ត្រាអតិថិជន។ ពួកគេត្រូវការដើម្បីទទួលបានព័ត៌មាននៅក្នុងតារាងអតិថិជនដើម្បីកែប្រែព័ត៌មាននេះនិងបន្ថែមកំណត់ត្រាថ្មីទៅក្នុងតារាង។ ពួកគេមិនអាចលុបទិន្នន័យទាំងអស់ពីឃ្លាំងទិន្នន័យទាំងស្រុងបានទេ។ ដំបូងយើងគួរតែបង្កើតគណនីអ្នកប្រើសម្រាប់ប្រតិបត្តិករនីមួយៗហើយបន្ទាប់មកបន្ថែមវាទៅក្នុងតួនាទីថ្មីគឺ DataEntry ។ បន្ទាប់មកយើងគួរតែប្រើសេចក្តីថ្លែងការណ៍ SQL ខាងក្រោមដើម្បីផ្តល់ឱ្យពួកវានូវសិទ្ធិសមស្រប:

ការជ្រើសរើសការបញ្ចូល, បញ្ចូល, ធ្វើបច្ចុប្បន្នភាព
លើអតិថិជន
TO DataEntry

ហើយនោះហើយជាអ្វីដែលមាននៅលើវា! ឥឡូវនេះសូមពិនិត្យមើលករណីដែលយើងផ្តល់សិទ្ធិអនុញ្ញាតកម្រិតមូលដ្ឋានទិន្នន័យ។ យើងចង់ឱ្យសមាជិកនៃតួនាទី DBA បន្ថែមតុថ្មីទៅក្នុងមូលដ្ឋានទិន្នន័យរបស់យើង។ លើសពីនេះទៀតយើងចង់ឱ្យពួកគេអាចផ្តល់ការអនុញ្ញាតឱ្យអ្នកប្រើផ្សេងទៀតធ្វើដូចគ្នា។ នេះជាសេចក្តីថ្លែងការណ៍ SQL:

អនុញ្ញាតបង្កើតតារាង
ទៅ DBA
ដោយមានជម្រើសអនុញ្ញាត

សូមកត់សម្គាល់ថាយើងបានបញ្ចូលបន្ទាត់ WITH GRANT OPTION ដើម្បីធានាថា DBAs របស់យើងអាចផ្តល់ការអនុញ្ញាតនេះដល់អ្នកប្រើផ្សេងទៀត។

ការដកសិទ្ធិ

នៅពេលដែលយើងបានផ្តល់ការអនុញ្ញាតវាជារឿយៗចាំបាច់ត្រូវដកហូតពួកវានៅកាលបរិច្ឆេទក្រោយ។ ជាសំណាងល្អ SQL ផ្តល់ឱ្យយើងនូវពាក្យបញ្ជា REVOKE ដើម្បីដកសិទ្ធិអនុញ្ញាតពីមុន។ នេះជាវាក្យសម្ព័ន្ធ:

REVOKE [សិទ្ធិអនុញ្ញាត] <សិទ្ធិ>
ON <តារាង>
FROM

អ្នកនឹងសម្គាល់ឃើញថាវាក្យសម្ព័ន្ធនៃពាក្យបញ្ជានេះគឺស្រដៀងទៅនឹងពាក្យបញ្ជា GRANT ។ ភាពខុសប្លែកគ្នាតែមួយគត់គឺថាការផ្តល់ជម្រើសត្រូវបានបញ្ជាក់នៅលើបន្ទាត់ពាក្យបញ្ជា REVOKE ជាជាងនៅចុងបញ្ចប់នៃពាក្យបញ្ជា។ ជាឧទាហរណ៍សូមស្រមៃថាយើងចង់លុបចោលការអនុញ្ញាតពីមុនរបស់ម៉ារីដើម្បីដកចេញកំណត់ត្រាពីមូលដ្ឋានទិន្នន័យរបស់អតិថិជន។ យើងប្រើពាក្យបញ្ជាដូចខាងក្រោម:

REVOKE DELETE
លើអតិថិជន
ពីម៉ារី

ហើយនោះហើយជាអ្វីដែលមាននៅលើវា! មានយន្តការមួយបន្ថែមទៀតដែលគាំទ្រដោយ Microsoft SQL Server ដែលមានតំលៃនិយាយ - ពាក្យបញ្ជា DENY ។ ពាក្យបញ្ជានេះអាចត្រូវបានប្រើដើម្បីបដិសេធសិទ្ធិជាក់លាក់ចំពោះអ្នកប្រើដែលពួកគេប្រហែលជាអាចមានតាមរយៈសមាជិកនាពេលបច្ចុប្បន្នឬនាពេលអនាគត។ នេះជាវាក្យសម្ព័ន្ធ:

DENY <សិទ្ធិ>
ON <តារាង>
ទៅ <អ្នកប្រើ / តួនាទី

ឧទាហរណ៍

ត្រលប់ទៅឧទាហរណ៏មុនយើងសូមស្រមៃថាម៉ារីក៏ជាសមាជិកនៃតួនាទីអ្នកចាត់ការដែលអាចចូលប្រើតារាងអតិថិជន។ សេចក្តីថ្លែងការណ៍ REVOKE មុននឹងមិនគ្រប់គ្រាន់ដើម្បីបដិសេធការចូលដំណើរការរបស់នាងទៅតុ។ វានឹងដកការអនុញ្ញាតពីនាងតាមរយៈសេចក្តីថ្លែងការណ៍ GRANT ដែលផ្ដោតលើគណនីអ្នកប្រើរបស់នាងប៉ុន្តែនឹងមិនប៉ះពាល់ដល់សិទ្ធិដែលបានទទួលតាមរយៈសមាជិកភាពរបស់នាងនៅក្នុងតួនាទីអ្នកគ្រប់គ្រងទេ។ ទោះជាយ៉ាងណា, ប្រសិនបើយើងប្រើសេចក្តីថ្លែងការណ៍ DENY វានឹងរារាំងការទទួលមរតករបស់នាងនៃការអនុញ្ញាត្តិ។ នេះជាពាក្យបញ្ជា:

DENY លុប
លើអតិថិជន
ទៅម៉ារី

ពាក្យបញ្ជា DENY សំខាន់បង្កើត "ការអនុញ្ញាតអវិជ្ជមាន" នៅក្នុងការគ្រប់គ្រងការចូលដំណើរការមូលដ្ឋានទិន្នន័យ។ ប្រសិនបើយើងសម្រេចចិត្តផ្តល់ការអនុញ្ញាតឱ្យម៉ារីដកហូតជួរដេកពីតារាងអតិថិជនយើងមិនអាចប្រើពាក្យបញ្ជា GRANT បានទេ។ ពាក្យបញ្ជានោះនឹងត្រូវបានបដិសេធភ្លាមៗដោយ DENY ដែលមានស្រាប់។ ផ្ទុយទៅវិញដំបូងយើងនឹងប្រើពាក្យបញ្ជា REVOKE ដើម្បីលុបធាតុអនុញ្ញាតអវិជ្ជមានដូចខាងក្រោម:

REVOKE DELETE
លើអតិថិជន
ពីម៉ារី

អ្នកនឹងសម្គាល់ឃើញថាពាក្យបញ្ជានេះគឺពិតជាដូចនឹងអ្វីដែលប្រើដើម្បីដកសិទ្ធិអនុញ្ញាតវិជ្ជមាន។ សូមចងចាំថាពាក្យបញ្ជា DENY និង GRANT ធ្វើការទាំងស្រុងក្នុងរបៀបដូចគ្នា * mdash ពួកគេទាំងពីរបង្កើតសិទ្ធិ (វិជ្ជមានឬអវិជ្ជមាន) នៅក្នុងយន្តការត្រួតពិនិត្យការចូលដំណើរការទិន្នន័យ។ ពាក្យបញ្ជា REVOKE លុបសិទ្ធិអនុញ្ញាតវិជ្ជមាននិងអវិជ្ជមានទាំងអស់សម្រាប់អ្នកប្រើដែលបានបញ្ជាក់។ នៅពេលដែលពាក្យបញ្ជានេះត្រូវបានចេញ, ម៉ារីនឹងអាចលុបជួរដេកពីតារាងប្រសិនបើនាងជាសមាជិកនៃតួនាទីដែលមានការអនុញ្ញាតនោះ។ ជាជម្រើសពាក្យបញ្ជា GRANT អាចត្រូវបានចេញដើម្បីផ្តល់សិទ្ធិ DELETE ដោយផ្ទាល់ទៅគណនីរបស់នាង។

នៅក្នុងវគ្គសិក្សានៃអត្ថបទនេះអ្នកបានរៀនពីកិច្ចព្រមព្រៀងដ៏ល្អអំពីយន្តការត្រួតពិនិត្យការចូលប្រើដែលបានគាំទ្រដោយភាសាសំណួរធម្មតា។ សេចក្តីណែនាំនេះគួរផ្តល់ឱ្យអ្នកនូវចំណុចចាប់ផ្តើមដ៏ល្អមួយប៉ុន្តែខ្ញុំសូមលើកទឹកចិត្តអ្នកឱ្យយោងឯកសាររបស់អ្នកនៅក្នុង DBMS ដើម្បីសិក្សាពីវិធានការសុវត្ថិភាពដែលបានគាំទ្រដោយប្រព័ន្ធរបស់អ្នក។ អ្នកនឹងរកឃើញ មូលដ្ឋានទិន្នន័យ ជាច្រើនដែលគាំទ្រយន្ដការត្រួតពិនិត្យការចូលដំណើរការកម្រិតខ្ពស់ដូចជាការផ្តល់សិទ្ធិលើជួរឈរជាក់លាក់។