Skip to main content

ให้สิทธิ์ในการ Deploy WSP ใน SharePoint 2010

Submitted by ezybzy on

เมื่อเราเริ่มตั้ง Environment สำหรับการพัฒนา การแยก User ของนักพัฒนาออกจากกันดูจะเป็นเรื่องที่เข้าท่า เพราะสไตล์การพัฒนาของนักพัฒนาแต่ละคนที่แตกต่างกัน (คนละรำคาญการปิดหน้าต่างที่จำเป็นการใน Debug เสียจริง) แต่เมื่อแยก User ออกมาแล้วเราก็จะพบปัญหาเรื่องสิทธิ์ในการเข้าถึงเว็บที่จะทดสอบ รวมถึงสิทธิ์ในการติดตั้ง WSP

สำหรับสิทธิ์ในการเข้าถึงเว็บ ปกติจะแก้ได้ด้วยการเพิ่มสิทธิ์ไม่ว่าจะเป็น Farm Administrator หรือ Site Collection Administrator ให้กับผู้ใช้ที่ต้องการ

ส่วนสิทธิ์ในการติดตั้ง WSP จากการค้นหาหลาย ๆ เว็บแนะนำวิธีให้ไปเพิ่มสิทธิ์ db_owner ให้กับ User ที่ต้องการลงใน Database ของ SharePoint เองซึ่งผมมองว่ามันไม่น่าจะเป็นแนวทางที่ Microsoft อยากจะให้ทำเท่าไร แต่แล้วก็พบว่ามีคำสั่ง PowerShell คำสั่งหนึ่งที่จะช่วยเพิ่มสิทธิ์พิเศษนี้ได้ คำสั่งนั้นคือ Add-SPShellAdmin

หลักการคือ การจะสามารถติดตั้ง WSP ได้ ผู้ใช้ต้องมีสิทธิ์ในการจัดการ SharePoint ผ่าน Shell และมีสิทธิ์ในการเข้าถึงฐานข้อมูลที่เกี่ยวข้องใน SharePoint ดังนั้นผู้ใช้คำสั่งคำสั่งนี้ครั้งแรกคือ User ที่สิทธิ์ใหญ่ที่สุดใน SharePoint Farm

คำสั่งน่ารู้คือ

Add-SPShellAdmin -UserName *DOMAIN\Username*

แต่แค่นี้ยังไม่พอครับ คำสั่งนี้แค่เพิ่มให้เขาพร้อมที่จะใช้งาน PowerShell ได้แต่ยังไม่สามารถติดตั้งได้ คำสั่งต่อมาที่ต้องรู้คือ

Add-SPShellAdmin -UserName *DOMAIN\Username* -database *DATABASE_GUID*

ปัญหาคือ เราจะทราบได้อย่างไรว่ามีฐานข้อมูลตัวไหนที่เกี่ยวข้องกับเราบ้าง เพราะถ้าใส่ไม่ครบ อาจจะพบปัญหาคือสั่ง Deploy ลงได้แค่บาง Site Collection กรณีที่ Web Application นั้นมีฐานข้อมูลที่เกี่ยวข้องอยู่หลาย ๆ ก้อน ซึ่งปัญหานี้จะปรากฏใน Event Viewer เป็น EventID 3760 ซึ่งกล่าวถึง Login failure ของฐานข้อมูล

คำสั่งที่น่ารู้อีก 2 คำสั่งคือ Get-SPDatabase และ Get-SPContentDatabase ซึ่งเมื่อศึกษาพารามิเตอร์ที่เกี่ยวข้องก็จะทำให้เราเลือก Content Database ที่เกี่ยวข้องกับ Web Application ของเรา คำสั่ง Get-SPContentDatabase จะแสดงเฉพาะฐานข้อมูลตัวที่ Started อยู่เท่านั้น แต่ไม่ได้แปลว่านี่คือฐานข้อมูลทั้งหมดที่เกี่ยวข้องกับ Web Application ของเรา ซึ่งอาจจะต้องคอยสังเกตจาก EventID 3760 ด้วย

การทดลองครั้งหนึ่งที่ได้ทำคือ ทำการติดตั้ง WSP ใส่ Site Collection 2 ตัวคือ http://foo และ http://foo/bar ผลปรากฏว่าเฉพาะ http://foo ที่ทำการติดตั้งสำเร็จ เนื่องจากบังเอิญว่า http://foo/bar นั้นอยู่บนฐานข้อมูลอีกก้อนที่ไม่อยู่ในสถานะ Started จึงต้องสั่งเพิ่มสิทธิ์ผู้ใช้เข้าฐานข้อมูลก้อนนั้น แล้วจึงทำการติดตั้งได้

จะว่าไปคำว่า Started/Stopped ของ Content Database นี่ก็สร้างความสับสนจริง ๆ เพราะนิยามมันคือ การยอมรับให้มี Site Collection ใหม่เกิดบนตัวมันได้ ซึ่งเมื่อเปลี่ยนเป็นสถานะ Stopped นั่นแปลว่าปิดรับการเพิ่ม Site Collection ไม่ได้ความว่าฐานข้อมูลก้อนนั้นไม่ถูกใช้งาน

Tags