মাইএসকিউএল এ নতুন ব্যবহারকারী তৈরি করুন এবং এটি একটি ডাটাবেসে সম্পূর্ণ অ্যাক্সেস দিন


628

আমি মাইএসকিউএলে একটি নতুন ব্যবহারকারী তৈরি করতে এবং এটি কেবল একটি ডাটাবেসে সম্পূর্ণ অ্যাক্সেস দিতে চাই dbTest, বলুন যে আমি এর মতো একটি কমান্ড দিয়ে তৈরি করি create database dbTest;। এটি করার জন্য মাইএসকিউএল আদেশগুলি কী হবে?

উত্তর:


829

ব্যবহারকারী তৈরি করতে এটি চেষ্টা করুন:

CREATE USER 'user'@'hostname';

এটি ডাটাবেসে অ্যাক্সেস দেওয়ার জন্য চেষ্টা করুন dbTest:

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

আপনি যদি একই মেশিনে মাইএসকিউএল অ্যাক্সেস কোড / সাইট চালাচ্ছেন তবে হোস্টনাম লোকালহোস্ট হবে।

এখন, ব্রেক ডাউন।

GRANT - এটি ব্যবহারকারীকে তৈরি করতে এবং ডাটাবেস, টেবিল ইত্যাদির অধিকার প্রদানের জন্য ব্যবহৃত কমান্ড is

ALL PRIVILEGES- এটি এটিকে জানায় যে ব্যবহারকারীর সমস্ত মানক সুবিধা থাকবে। এটি GRANT কমান্ডটি ব্যবহার করার অধিকারটি অন্তর্ভুক্ত করে না।

dbtest.*- পুরো ডিবেস্ট ডাটাবেসে এই অধিকারগুলি প্রয়োগের জন্য এই মাইএসকিউএলকে নির্দেশ দেয়। আপনি চাইলে * নির্দিষ্ট টেবিলের নাম বা স্টোর রুটিন দিয়ে * প্রতিস্থাপন করতে পারেন।

TO 'user'@'hostname'- 'ব্যবহারকারী' হ'ল আপনি যে ব্যবহারকারীর অ্যাকাউন্ট তৈরি করছেন তার ব্যবহারকারীর নাম। দ্রষ্টব্য: আপনার অবশ্যই সেখানে একক উদ্ধৃতি থাকতে হবে। 'হোস্টনেম' মাইএসকিউএলকে বলে যে ব্যবহারকারীর কাছ থেকে কী সংযোগ করতে পারে তা হোস্ট করে। আপনি যদি এটি একই মেশিন থেকে চান তবে ব্যবহার করুনlocalhost

IDENTIFIED BY 'password' - আপনি যেমন অনুমান করেছিলেন, এটি সেই ব্যবহারকারীর জন্য পাসওয়ার্ড সেট করে।


82
আপনি যদি নেটওয়ার্ক অ্যাক্সেসের অনুমতি দিচ্ছেন এবং কোনও হোস্টের সংযোগ চান তবে আপনি 'হোস্টনেম' পরিবর্তন করে '%' করতে পারেন। উদাহরণস্বরূপ, ... TO 'dbuser' @ '%' পরিচয় ... '%' হল হোস্ট ওয়াইল্ডকার্ড।
পদার্থবিজ্ঞান

17
আপনি ব্যবহারকারী এবং টেবিলের উপর কাজ করার সময় সুবিধাগুলি ফ্ল্যাশ করতে ভুলবেন না! :-)
কর্সিকা

31
এটি আমার পক্ষে কাজ করেছে: ব্যবহারকারীর তৈরি করুন 'ব্যবহারকারীর1' @ 'লোকালহোস্ট' পরিচয় দিয়ে 'পাসওয়ার্ড'; Db_database1- এ সমস্ত ব্যক্তিগতকৃত অনুদান দিন * ফ্ল্যাশ বেসামালিকাগুলি;
মোহামাদ ফকিহ

4
@ ড্যানম্যাকগ্রাথ: যদি ব্যবহারকারী ইতিমধ্যে উপস্থিত থাকে এবং পাসওয়ার্ড থাকে তবে 'পাসওয়ার্ড' ধারাটি দ্বারা সনাক্ত করা কি বাধ্যতামূলক?
ন্যানোসফ্ট

8
নতুন ব্যবহারকারী তৈরি করতে GRANT ব্যবহার করা ভবিষ্যতে মাইএসকিউএল-এর রিলিজে মুছে ফেলা হবে (এটি লেখার সময় এটি হ্রাস করা হয়)। ভবিষ্যতে এটি দুটি কল দিয়ে করতে হবে, ব্যবহারকারী তৈরি করুন তারপরে গ্রান্ট।
ড্যারেন ফেলটন

325

বাক্য গঠন

মাইএসকিউএল / মারিয়াডিবি ৫.7..6 এবং উচ্চতরতে ব্যবহারকারী তৈরি করতে CREATE USERসিনট্যাক্স ব্যবহার করুন :

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';

তারপরে ডাটাবেসে সমস্ত অ্যাক্সেস দেওয়ার জন্য (যেমন my_db) GRANTসিনট্যাক্স ব্যবহার করুন , যেমন

GRANT ALL ON my_db.* TO 'new_user'@'localhost';

কোথায় ALL( priv_type ) নির্দিষ্ট বিশেষাধিকার যেমন সঙ্গে প্রতিস্থাপিত হতে পারে SELECT, INSERT, UPDATE, ALTER, ইত্যাদি

তারপরে নতুন বরাদ্দকৃত অনুমতিগুলি পুনরায় লোড করতে:

FLUSH PRIVILEGES;

নির্বাহ

উপরের কমান্ডগুলি চালনার জন্য আপনাকে mysqlকমান্ড চালাতে হবে এবং এগুলি প্রম্পটে টাইপ করতে হবে, তারপরে quitআদেশ দ্বারা লগআউট বা Ctrl- D

শেল থেকে চালানোর জন্য, -eপ্যারামিটারটি ব্যবহার করুন ( SELECT 1উপরের একটি কমান্ডের সাথে প্রতিস্থাপন করুন ):

$ mysql -e "SELECT 1"

বা স্ট্যান্ডার্ড ইনপুট থেকে বিবৃতি মুদ্রণ:

$ echo "FOO STATEMENT" | mysql

যদি আপনি উপরের সাথে অ্যাক্সেস অস্বীকার পেয়ে থাকেন তবে -u(ব্যবহারকারীর জন্য) এবং -p(পাসওয়ার্ডের জন্য) পরামিতিগুলি নির্দিষ্ট করুন বা দীর্ঘমেয়াদী অ্যাক্সেসের জন্য আপনার শংসাপত্রগুলি সেট করুন ~/.my.cnf, যেমন

[client]
user=root
password=root

শেল ইন্টিগ্রেশন

মাইএসকিউএল সিনট্যাক্সের সাথে পরিচিত নয় এমন লোকদের জন্য, এখানে হ্যান্ডেল শেল ফাংশনগুলি রয়েছে যা মনে রাখা এবং ব্যবহার করা সহজ (সেগুলি ব্যবহার করার জন্য, আপনাকে আরও নীচে অন্তর্ভুক্ত শেল ফাংশনগুলি লোড করতে হবে)।

এখানে উদাহরণ:

$ mysql-create-user admin mypass
| CREATE USER 'admin'@'localhost' IDENTIFIED BY 'mypass'

$ mysql-create-db foo
| CREATE DATABASE IF NOT EXISTS foo

$ mysql-grant-db admin foo
| GRANT ALL ON foo.* TO 'admin'@'localhost'
| FLUSH PRIVILEGES

$ mysql-show-grants admin
| SHOW GRANTS FOR 'admin'@'localhost'
| Grants for admin@localhost                                                                                   
| GRANT USAGE ON *.* TO 'admin'@'localhost' IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4' |
| GRANT ALL PRIVILEGES ON `foo`.* TO 'admin'@'localhost'

$ mysql-drop-user admin
| DROP USER 'admin'@'localhost'

$ mysql-drop-db foo
| DROP DATABASE IF EXISTS foo

উপরের কমান্ডগুলি ব্যবহার করার জন্য, আপনাকে নীচের ফাংশনগুলি অনুলিপি করে আপনার আরসি ফাইলটিতে আটকানো প্রয়োজন (উদাঃ .bash_profile) এবং আপনার শেল বা উত্স ফাইলটি পুনরায় লোড করুন। এই ক্ষেত্রে কেবল টাইপ করুন source .bash_profile:

# Create user in MySQL/MariaDB.
mysql-create-user() {
  [ -z "$2" ] && { echo "Usage: mysql-create-user (user) (password)"; return; }
  mysql -ve "CREATE USER '$1'@'localhost' IDENTIFIED BY '$2'"
}

# Delete user from MySQL/MariaDB
mysql-drop-user() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-user (user)"; return; }
  mysql -ve "DROP USER '$1'@'localhost';"
}

# Create new database in MySQL/MariaDB.
mysql-create-db() {
  [ -z "$1" ] && { echo "Usage: mysql-create-db (db_name)"; return; }
  mysql -ve "CREATE DATABASE IF NOT EXISTS $1"
}

# Drop database in MySQL/MariaDB.
mysql-drop-db() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-db (db_name)"; return; }
  mysql -ve "DROP DATABASE IF EXISTS $1"
}

# Grant all permissions for user for given database.
mysql-grant-db() {
  [ -z "$2" ] && { echo "Usage: mysql-grand-db (user) (database)"; return; }
  mysql -ve "GRANT ALL ON $2.* TO '$1'@'localhost'"
  mysql -ve "FLUSH PRIVILEGES"
}

# Show current user permissions.
mysql-show-grants() {
  [ -z "$1" ] && { echo "Usage: mysql-show-grants (user)"; return; }
  mysql -ve "SHOW GRANTS FOR '$1'@'localhost'"
}

দ্রষ্টব্য: আপনি যদি আপনার বাশ ইতিহাসে ট্রেস (যেমন পাসওয়ার্ড) না রেখে পছন্দ করেন তবে চেক করুন: বাশ ইতিহাসে কমান্ডগুলি প্রদর্শন করতে কীভাবে প্রতিরোধ করবেন?


1
আপনার কি ব্যবহারকারী তৈরি করতে হবে এবং আলাদা আলাদা সুবিধা দেওয়ার দরকার আছে? আমি খুঁজে পেয়েছি যে অনুদান কমান্ডটি ব্যবহারকারী নিজেই তৈরি করেছে বলে মনে হচ্ছে, কমপক্ষে mysql.user সারণিতে এটির মতো দেখায়।
টিম

@ ক্রিয়েটিভিটিকিলস পাসওয়ার্ডটি দিয়ে কাজ করবে যদি আপনি ~/.my.cnfউপরের পরামর্শ অনুসারে এটিতে যুক্ত করেন ।
কেনারব

শেল ইতিহাসে পাসওয়ার্ডের চিহ্নগুলি রেখে যাওয়া কোনও দুর্দান্ত ধারণা নয়
স্মারকিতানোভ

@ ডমিরকিটানভ আপনি একটি স্থান যোগ করে এটি প্রতিরোধ করতে পারেন, দেখুন: বাশ ইতিহাসে কমান্ডগুলি প্রদর্শন করতে কীভাবে প্রতিরোধ করবেন?
কেনারব

58

একটি ব্যবহারকারী তৈরি করতে এবং একটি ডেটাবেজে সমস্ত সুযোগ প্রদান করতে।

মাইএসকিউএল এ লগ ইন করুন:

mysql -u root

এখন তৈরি এবং অনুদান

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

নামবিহীন ব্যবহারকারী (কেবল স্থানীয় পরীক্ষার জন্য)

পর্যায়ক্রমে, আপনি যদি কেবল কোনও ডাটাবেসে সম্পূর্ণ সীমাহীন অ্যাক্সেস দিতে চান (যেমন পরীক্ষার জন্য স্থানীয় মেশিনে, আপনি বেনামে ব্যবহারকারীর অ্যাক্সেস দিতে পারেন, যেমন:

GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'

সচেতন থাকা

এটি বিকাশের জাঙ্ক ডেটার জন্য সূক্ষ্ম। আপনার পছন্দের যে কোনও জিনিস দিয়ে এটি করবেন না।


3
আপনি এর মতো একটি বেনামে ব্যবহারকারী তৈরি করতে পারেন, তবে করবেন না! পুরোপুরি সুযোগসুবিধা এবং পাসওয়ার্ড সহ কোনও ব্যবহারকারী থাকার কোনও যুক্তিসঙ্গত কারণ নেই তবে যদি কেউ আপনার সার্ভারে অ্যাক্সেস পায় তবে তার উচিত নয় যে এটি আপনার একদিন / বছর / ব্যবসা / চাকরীকে একদিন নষ্ট করে দিতে পারে। তাদের জন্য কেন অন্য কিছু সহজ করা যায়?
লুক কাজিন্স

2
যদি কেউ আমার ম্যাকবুকটিতে দূরবর্তী অ্যাক্সেস অর্জন করে থাকে তবে আমার বিকাশের ডেটাবেসের বিষয়বস্তুর চেয়ে আমার আরও বেশি চিন্তা করতে হবে। আমার পুনরায় পুনরাবৃত্তি করা উচিত, এটি কেবল স্থানীয় পরীক্ষার জন্য, বাস্তব ডেটা দিয়ে এটি করবেন না।
সুপারলুমিনারি

4
ঠিক যেমন, অন্যান্য সমস্ত বিষয় নিয়ে উদ্বিগ্ন হওয়ার সাথে সাথে আপনার ডেভ ডাটাবেসের বিষয়বস্তু সম্পর্কেও চিন্তা করবেন না। আপনার ডেভ ডাটাবেসে লাইভ ডাটাবেসের ডেটার স্নিপেট থাকতে পারে (যেমন কোনও বাগ প্রতিলিপি দেওয়ার জন্য) যা সুরক্ষিত রাখতে প্রতিটি প্রচেষ্টা করা উচিত। পাসওয়ার্ড ছাড়া ডাটাবেস অ্যাক্সেস করার দরকার নেই। এমনকি সময় বাঁচায় না। সম্ভাব্য ঝামেলার মূল্য নেই।
লুক কাজিন্স

1
সম্ভবত। আমার ক্ষেত্রে এটি জঞ্জাল ডেটা, আমি ঝুঁকি নিয়ে বেঁচে থাকব।
সুপারলুমিনিয়ি

17
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"

-p বিকল্পটি উপেক্ষা করুন , যদি মাইএসকিএল ব্যবহারকারীর কোনও পাসওয়ার্ড না থাকে বা কেবল "[এন্টার]" বাটনটি পাস করতে টিপুন। কোঁকড়া ধনুর্বন্ধনী দিয়ে ঘেরা স্ট্রিংগুলির প্রকৃত মানগুলির সাথে প্রতিস্থাপন করা দরকার।


13

আপনি তৈরি করুন ব্যবহারকারী বিবৃতি ব্যবহার করে নতুন ব্যবহারকারী তৈরি করতে এবং গ্রান্ট ব্যবহার করে তাদের অধিকার দিতে পারেন ।


'মাইপাস' দ্বারা ব্যবহারকারীকে 'জেফরি' @ 'লোকালহোস্ট' সনাক্ত করুন;
সিজিএল

6

আমার কাছে এটি কাজ করেছে

CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234'; 
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost'; 
FLUSH PRIVILEGES;

কোথায়

  • স্প্যানার: ব্যবহারকারীর নাম
  • 1234: স্প্যানারের পাসওয়ার্ড
  • পরীক্ষা: ডাটাবেস 'স্পোন্ডার' এর ডানদিকে প্রবেশাধিকার রয়েছে

2

আপনি যদি কোনও নতুন ব্যবহারকারী তৈরি করতে চান তবে নীচের কমান্ডটি কাজ করবে যদি আপনার লোকালহোস্টের নির্দিষ্ট ডেটাবেসগুলিতে (আপনার মাইএসকিএলের সমস্ত ডাটাবেস নয়) সমস্ত অ্যাক্সেস দেয়।

GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

এটি লোকালহোস্টের সেই ব্যবহারকারীকে একটি ডেটাবেজে test_database(আপনার ক্ষেত্রে dbTest) সমস্ত সুযোগ-সুবিধা দেয় grant

উপরের কমান্ডটি নীচের কমান্ডটি চালিয়ে যে ব্যবহারকারীকে কী অনুমতি দিয়েছে তা পরীক্ষা করে দেখুন।

SHOW GRANTS FOR 'user'@'localhost'

কেবলমাত্র যদি আপনি কেবল একটি একক টেবিলের মধ্যে ব্যবহারকারীর অ্যাক্সেস সীমাবদ্ধ করতে চান

GRANT ALL ON mydb.table_name TO 'someuser'@'host';

সিনট্যাক্স ত্রুটি এবং আপনার প্রথম লাইনে একটি টাইপো, "'টেস্ট_ড্যাটাসে PRIVILEGES চালু" হওয়া উচিত নয়, এর পরে "" * * হওয়া উচিত, যেমন, টেস্ট_ড্যাটাস। *, এবং একটি টাইপো, "টেস্ট_ড্যাটাবেস" হওয়া উচিত "।
ব্রেটিনস

0

যদি hostঅংশটি বাদ দেওয়া হয় তবে এটি %সমস্ত হোস্টকে মঞ্জুরি দিয়ে ওয়াইল্ডকার্ড প্রতীকের ডিফল্ট হয় ।

CREATE USER 'service-api';

GRANT ALL PRIVILEGES ON the_db.* TO 'service-api' IDENTIFIED BY 'the_password'

SELECT * FROM mysql.user;
SHOW GRANTS FOR 'service-api'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.