9

Tôi đã xây dựng một cơ sở dữ liệu trong SQL Server 2008 R2 và đang sử dụng Visual Studio 2010 Ultimate để tạo một dự án cơ sở dữ liệu cho nó.Cách xử lý người dùng và thông tin đăng nhập trong Dự án Cơ sở dữ liệu Visual Studio?

Tôi đã tạo cả dự án SQL Server và dự án Cơ sở dữ liệu để đại diện cho môi trường của tôi dựa trên số MSDN walkthrough này. Các so sánh lược đồ cho cả hai dự án hoạt động như mong đợi và tôi có thể sao chép tất cả các thay đổi máy chủ đến dự án.

Tuy nhiên, dường như đã nhập một số cấu hình môi trường cụ thể như đăng nhập, ánh xạ người dùng/đăng nhập, tài khoản dịch vụ cục bộ (ví dụ: NT SERVICE \ MSSQL $ SQLEXPRESS2008), v.v. dự án có thể được triển khai trên một máy chủ khác và các chi tiết cụ thể về môi trường đó có thể khác nhau. Ví dụ, các trường hợp được đặt tên có thể khác nhau giữa Dev, QA và Prod. Người dùng có thể được ánh xạ tới các thông tin đăng nhập khác nhau.

Tôi có đang thực hiện việc này đúng cách hay tôi nên thực hiện các bước bổ sung để làm cho dự án cơ sở dữ liệu có thể di chuyển đến tất cả các môi trường?

Mục tiêu của tôi là sử dụng dự án này để schema

  1. Chụp trong điều khiển phiên bản
  2. thay đổi schema
  3. triển khai như bằng cách tạo ra sự thay đổi kịch bản
  4. tie để kiểm tra đơn vị để tạo ra một môi trường thử nghiệm dùng một lần trên bay.

Trả lời

7

Chúng tôi đã phải làm điều này trước và kết thúc bằng ý tưởng của Jamie Thompson về việc tạo tập lệnh hậu triển khai để xử lý quyền dựa trên biến chứa tên môi trường/cấu hình. Bạn có thể tìm thấy bài viết tại đây: http://sqlblog.com/blogs/jamie_thomson/archive/2010/07/21/a-strategy-for-managing-security-for-different-environments-using-the-database-development-tools-in-visual-studio-2010.aspx

Tôi cũng đã viết một kịch bản để xử lý kịch bản các điều khoản:

SELECT 
state_desc + ' ' + permission_name + 
' on ['+ ss.name + '].[' + so.name + '] 
to [' + sdpr.name + ']' 
COLLATE LATIN1_General_CI_AS as [Permissions T-SQL] 
FROM SYS.DATABASE_PERMISSIONS AS sdp 
JOIN sys.objects AS so 
    ON sdp.major_id = so.OBJECT_ID 
JOIN SYS.SCHEMAS AS ss 
    ON so.SCHEMA_ID = ss.SCHEMA_ID 
JOIN SYS.DATABASE_PRINCIPALS AS sdpr 
    ON sdp.grantee_principal_id = sdpr.principal_id 

UNION 

SELECT 
state_desc + ' ' + permission_name + 
' on Schema::['+ ss.name + '] 
to [' + sdpr.name + ']' 
COLLATE LATIN1_General_CI_AS as [Permissions T-SQL] 
FROM SYS.DATABASE_PERMISSIONS AS sdp 
JOIN SYS.SCHEMAS AS ss 
    ON sdp.major_id = ss.SCHEMA_ID 
    AND sdp.class_desc = 'Schema' 
JOIN SYS.DATABASE_PRINCIPALS AS sdpr 
    ON sdp.grantee_principal_id = sdpr.principal_id 
order by [Permissions T-SQL] 
GO 

Cùng nhau, tôi thiết lập các điều khoản vào hậu triển khai kịch bản và thư mục mà sẽ tái sử dụng/vai trò/quyền dựa trên môi trường. Chúng ta gọi một kịch bản lệnh "wrapper" từ phần hậu triển khai chính mà đi qua phần còn lại để tìm ra phần nào sẽ chạy.

+0

Đây có phải là giải pháp tốt nhất cho các phiên bản mới hơn của máy chủ SQL và Visual Studio không? Đang cố gắng tìm ra cách tốt nhất để xử lý điều này trên VS2015 ngay bây giờ nhưng không thấy bất cứ điều gì mới. – ngneema

+1

Tôi đã không thấy bất cứ điều gì mới về cách để làm điều này, mặc dù có các thiết lập chi tiết hơn trong VS2015 để bỏ qua các loại đối tượng khác nhau. –

Các vấn đề liên quan