ฉันจะให้สิทธิ์ทั้งหมดกับ db2admin โลคัลกับ DB2 9.7 บน Windows ได้อย่างไร?


10

ฉันมีแล็ปท็อปเป็นสถานีสำหรับนักพัฒนาซอฟต์แวร์ที่มีระบบปฏิบัติการ Windows XP Professional Edition, Service Pack 3

ฉันดาวน์โหลดและติดตั้งฟิกซ์แพ็ก IBM DB2 UDB 9.7 ของ Express-C แล้ว

ฉันมีบัญชี Windows ในพื้นที่ชื่อ db2admin ที่ฉันใช้ในฐานะผู้ดูแลระบบฐานข้อมูลในเครื่องสำหรับการติดตั้ง DB2 ในพื้นที่ของฉัน (เพื่อจุดประสงค์ในการพัฒนาเท่านั้น)

ฉันสามารถเรียกใช้สิ่งต่อไปนี้ได้โดยไม่มีปัญหาเมื่อเรียกใช้หน้าต่างคำสั่ง:

db2 attach to db2 user db2admin using xxxxxxxxxx

ที่ช่วยให้ฉันแนบกับอินสแตนซ์ของฉันที่เรียกว่า DB2

ฉันสามารถรันคำสั่งสร้างฐานข้อมูลของฉันได้

ฉันพยายามเชื่อมต่อกับฐานข้อมูลเพื่อให้สิทธิ์ทั้งหมดสำหรับบัญชี db2admin ของฉันใน DB2

db2 CONNECT TO MYDB;
SET SCHEMA DB2ADMIN;
db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT,SECADM ON DATABASE TO USER DB2ADMIN;
CONNECT RESET;

อย่างไรก็ตามเมื่อฉันรันสิ่งนั้น DB2 จะบอกฉันว่าบัญชีผู้ใช้ windows จริงของฉัน (synprgcma) ไม่มีสิทธิ์ในการให้สิทธิ์แก่ผู้ใช้ db2admin

ดังนั้นถ้าฉันเปลี่ยนสคริปต์ที่สองเป็นต่อไปนี้:

db2 CONNECT TO MYDB USER db2admin USING xxxxxxxx;
SET SCHEMA DB2ADMIN;
db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT,SECADM ON DATABASE TO USER DB2ADMIN;
CONNECT RESET;

จากนั้น DB2 บอกฉันว่า db2admin ไม่สามารถเพิกถอนหรือมอบอำนาจให้ตัวเองได้ (อันที่จริงแล้วมันบอกฉันว่า id ไม่สามารถเพิกถอนหรือมอบอำนาจให้ตัวเอง)

ดังนั้นฉันจึงนิ่งงัน ฉันไม่ได้มีปัญหากับการติดตั้ง DB2 ก่อนหน้านี้ของฉัน (9.5 และฉันจำไม่ได้ว่าฟิกซ์แพ็กใดที่ฉันอยู่)

ฉันจะให้สิทธิ์ที่จำเป็นแก่บัญชีผู้ดูแลระบบท้องถิ่นได้อย่างไร ฉันเชื่อว่าฉันต้องการสิ่งนี้เพื่อเรียกใช้คำสั่ง bind ที่ฉันต้องทำต่อไป:

db2 CONNECT TO MYDB;
db2 bind @db2cli.lst blocking all grant public sqlerror continue CLIPKG 20;
db2 CONNECT RESET;

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม

แก้ไข:ฉันพบลิงค์ต่อไปนี้ที่เกี่ยวข้องกับสิ่งนี้ ยังไม่แน่ใจว่าจะทำงานอย่างไร แต่อย่างน้อยฉันก็ได้พบเอกสารบางอย่างแล้ว

คำตอบ:


5

จากลิงก์ด้านบนสุดท้ายในการแก้ไขของฉันฉันพบคำถามคำตอบของฉัน ฉันไม่สามารถปรับแต่งบัญชีระบบเนื่องจากการเข้าสู่ระบบของเรามาจาก LDAP และฉันไม่สามารถควบคุมกลุ่มและสิ่งที่ไม่ได้

ดังนั้นฉันทำต่อไปนี้:

  1. เปิด DB2 GUI (ง่ายที่สุดในการทำเช่นนี้)
  2. เชื่อมต่อกับฐานข้อมูลที่ต้องการเป็น db2admin
  3. เพิ่มการเข้าสู่ระบบของฉันไปยังฐานข้อมูลในฐานะผู้ใช้
  4. มอบสิทธิ์ทั้งหมดให้กับ id นั้น (id ของฉัน)
  5. ปลด
  6. เชื่อมต่อกับฐานข้อมูลที่ต้องการเป็นรหัสของฉัน
  7. ให้สิทธิ์ทั้งหมดแก่ db2admin
  8. ปลด

Voila! db2admin เข้าสู่ระบบในขณะนี้เป็นผู้มีอำนาจทั้งหมด

แก้ไข:ฉันจะออกไปข้างต้นเพราะช่วยให้ฉันเรียนรู้วิธีการทำสิ่งที่น่าสนใจใน DB2 อย่างไรก็ตามฉันได้เรียนรู้ว่าหน่วยงาน DBADM / SECADM กับ DATAACCESS และ ACCESSCTRL ให้สิทธิ์เจ้าของอินสแตนซ์ (ในกรณีของฉันคือรหัส db2admin) มีสิทธิ์ทั้งหมดที่จำเป็นในการโต้ตอบกับฐานข้อมูล จริง ๆ แล้วฉันแค่แสดงความคิดเห็นออกบรรทัดการให้สิทธิ์ข้างต้นในสคริปต์ สิ่งเหล่านี้ถูกทิ้งไว้จากสคริปต์ที่ทำงานกับเวอร์ชันเก่ากว่าของ DB2 ฉันยังพบว่าถ้าฉันต้องการให้เจ้าของอินสแตนซ์ DBADM หลังจากทำการกู้คืนไปยังฐานข้อมูล A จากฐานข้อมูล B มันเป็นเรื่องง่ายที่สุดเพียงแค่ตั้งค่าตัวแปรรีจิสตรี จากนั้นฉันไม่ต้องพยายามให้สิทธิ์เจ้าของ DBADM จะได้รับโดยอัตโนมัติไปยังฐานข้อมูลใด ๆ ที่เรียกคืนเป็นอินสแตนซ์


ไม่แน่ใจว่าคุณหมายถึงอะไรโดย DB2 GUI มีเวอร์ชั่นบรรทัดคำสั่งที่เราลองได้ไหม?
ดวงอาทิตย์

@ sunk818 - ขั้นตอนจะเหมือนกันแม้แต่กับบรรทัดคำสั่ง มันมีมากขึ้นเกี่ยวกับวิธีการที่ DB2 ทำงานเกี่ยวกับความปลอดภัยเริ่มตั้งแต่เวอร์ชั่น 9.7
Chris Aldrich

ความกังวลของฉันเกี่ยวกับการเข้าถึง SYSADM เพื่อสร้างฐานข้อมูล ... บางทีฉันเคยไปผิดคำถาม ;)
อาทิตย์

SYSADM มีความสามารถในการสร้างฐานข้อมูลเสมอ SYSCTRL ก็เช่นกัน
Chris Aldrich
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.