it-swarm.asia

منح امتيازات الجدول لمستخدم متصل من أي مضيف

لدي حساب مستخدم - دعنا نسميها "Wordpress" - أحتاجه للسماح بالوصول إلى بعض جداول الكتالوج في قاعدة بيانات تجارة إلكترونية أخرى على نفس الخادم. لقد قمت بتكوين المستخدم بثلاثة أقنعة المضيف المسموح لها بالاتصال من: "localhost" وعنوان IP لخادم الويب واسم المضيف لخادم الويب. لا توجد مشاكل هناك.

يمتلك المستخدم "WordPress" أيضًا حق الوصول الكامل إلى قاعدة البيانات الخاصة به ، الممنوحة عبر قسم امتيازات المخطط في MySQL Workbench. هنا ، يظهر أن المضيف هو '٪' ، وهو ما أريده ، حيث لا أريد إدارة ثلاث مجموعات مكررة من الامتيازات للمستخدم نفسه. إذا نظرت في mysql.db ، فإنني أرى هذه الامتيازات ، مع '٪' في عمود المضيف.

لذا أريد الآن منح إذن SELECT على عدد قليل من الجداول في قاعدة بيانات أخرى - دعنا نسميها "تخزين". لذا أحاول هذا:

GRANT SELECT ON store.catalog TO 'wordpress'@'%';

وحصلت على "لا يمكنني العثور على أي صف مطابق في جدول المستخدم" ، وذلك لسبب واضح هو أن "٪" ليس قناع المضيف الذي سمحت صراحة باتصال من هذا المستخدم بالذات. إذن ما هي الصيغة المناسبة لمنح امتياز الجدول لمستخدم من أي من أقنعة المضيف المسموح بها؟ كيف يفلت MySQL Workbench معها للحصول على امتيازات المخطط؟ لست مضطرًا إلى إدراج صفوف يدويًا في mysql.tables_priv ، أليس كذلك؟

تحديث : للتوضيح ، إليك الشكل الذي تبدو عليه جداول المستخدم/المنحة الحالية. من الواضح أني قمت بإخفاء بعض الأسماء. لاحظ أن المضيف في جدول امتيازات المخطط هو '٪' ، لكن لا يوجد أي مستخدمين بهذا المضيف. كيف يمكنني الحصول على MySQL للسماح لي بذلك مع منح كائن المخطط؟ ويفضل أن يكون ذلك دون التكتل مباشرة في mysql.tables_priv ، لكنني سأفعل ذلك إذا كان الأمر يتعلق به.

mysql> SELECT user, Host FROM mysql.user WHERE user = 'wordpress';
+-----------+-----------+
| user      | Host      |
+-----------+-----------+
| wordpress | 10.0.0.22 |
| wordpress | webserver |
| wordpress | localhost |
+-----------+-----------+
3 rows in set (0.00 sec)

mysql> SELECT user, Host, db, select_priv FROM mysql.db WHERE User = 'wordpress';
+-----------+------+----------------+-------------+
| user      | Host | db             | select_priv |
+-----------+------+----------------+-------------+
| wordpress | %    | wordpress      | Y           |
| wordpress | %    | wordpress_test | Y           |
+-----------+------+----------------+-------------+
2 rows in set (0.00 sec)

mysql> SHOW GRANTS FOR 'wordpress'@'localhost';
+---------------------------------------------------------------------------+
| Grants for [email protected]                                            |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wordpress'@'localhost' IDENTIFIED BY PASSWORD '--' |
+---------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SHOW GRANTS FOR 'wordpress'@'%';
ERROR 1141 (42000): There is no such grant defined for user 'wordpress' on Host '%'

هل يقوم MySQL Workbench بعمل شيء غير مرخص بامتيازات المخطط/الكائن؟ فقط للركلات ، لقد منحت بعض امتيازات الجدول لأحد تركيبات user @ Host المحددة ، ثم قمت بتحديث mysql.tables_priv لتغيير المضيف إلى '٪'. بعد تشغيل امتيازات FLUSH ، عملت بشكل مثالي. عجيب.

6
db2

عند تنفيذ GRANT SELECT ON store.catalog TO 'wordpress'@'%';، mysqld يريد ادراج صف في جدول المنح mysql.tables_priv. هنا mysql.tables_priv:

mysql> show create table mysql.tables_priv\G
*************************** 1. row ***************************
       Table: tables_priv
Create Table: CREATE TABLE `tables_priv` (
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Grantor` char(77) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `Table_priv` set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') CHARACTER SET utf8 NOT NULL DEFAULT '',
  `Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 NOT NULL DEFAULT '',
  PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`),
  KEY `Grantor` (`Grantor`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Table privileges'
1 row in set (0.00 sec)

mysql>

لأنك تريد إدراج صف في mysql.table_priv حيث user = 'wordpress' and Host = '٪' ، يجب أن يكون هناك صف في mysql.user حيث user = 'wordpress' and Host = '٪'.

ذكرت أيضًا أنك تستخدم MySQL Workbench. يجب أن تستخدم 'root'@'localhost'. عادةً ما يكون له جميع الحقوق وكلمة المرور.

إذا كنت ترغب فقط في السماح لـ SELECT المجهول مقابل هذا الجدول ، فقم أولاً بتشغيل هذا:

GRANT USAGE ON *.* TO 'wordpress'@'%';

هذا سيضع [email protected]'%' إلى mysql.user. عقب ذلك مباشرة، GRANT SELECT ON store.catalog TO 'wordpress'@'%' يجب أن تعمل بشكل جيد.

سيكون عليك أن ترى ما هي إدخالات أخرى wordpress الإدخالات في mysql.user. يجب أن يوضح هذا أوامر SQL GRANT التي تحتاجها:

SELECT CONCAT('GRANT SELECT ON store.catalog TO ',userhost,';') GrantCommand
FROM
(
    SELECT CONCAT('''',user,'''@''',Host,'''') userhost
    FROM mysql.user WHERE user='wordpress'
) A;
3
RolandoMySQLDBA

نجح ذلك بالنسبة لي باستخدام سطر الأوامر (وليس منضدة):

mysql> GRANT SELECT ON foo.bar TO 'wordpress'@'%';
Query OK, 0 rows affected (0.07 sec)

mysql> SHOW GRANTS FOR [email protected]'%';
+------------------------------------------------+
| Grants for [email protected]%                         |
+------------------------------------------------+
| GRANT USAGE ON *.* TO 'wordpress'@'%'          |
| GRANT SELECT ON `foo`.`bar` TO 'wordpress'@'%' |
+------------------------------------------------+
2 rows in set (0.05 sec)

مطعون حولها ووجدت هذا تقرير الشوائب . ما هو الإصدار الخاص بك منضدة العمل الخاصة بك؟ يبدو أن لديهم إصلاحًا ، ولكن ليسوا من مستخدمي Workbench ، لا أعرف إصدارهم (يجب إصلاح الإصدار الحالي).

حتى إذا لم يكن كذلك ، فإن الحل هو تشغيله من خلال سطر الأوامر!

2
Derek Downey