Làm cách nào tôi có thể ánh xạ thông tin đăng nhập vào cơ sở dữ liệu bằng T-SQL (không phải SSMS)


12

Tôi đang viết một chương trình yêu cầu tôi gán tất cả các quyền và mọi thứ trong mã. Tôi đã bị mắc kẹt trong phần này:

nhập mô tả hình ảnh ở đây

Tôi chỉ muốn thực hiện tương đương với việc nhấp vào ô nhỏ bên dưới "Bản đồ" cho cơ sở dữ liệu msdb và gán người dùng đó cho vai trò SqlAgentUser. Tôi cần một người dùng để có thể thêm / chỉnh sửa các công việc của SQL Server Agent. Tôi có thể có được các cài đặt ngay bằng SSMS nhưng tôi không thể tìm ra cách thực hiện bằng SQL thô.

Tôi đã xem xét ALTER LOGIN nhưng tôi không thấy bất cứ thứ gì tôi cần. Tôi nghi ngờ tôi chỉ không biết các điều khoản chính xác cho Google. Tôi thường không làm điều này.

Bất kỳ sự giúp đỡ nào cũng được đánh giá cao!


3
Bạn có thể "tạo tập lệnh" mà tôi nghĩ sẽ giúp bạn trong các dự án trong tương lai. Trên cùng của màn hình.
Tay đua SQL

1
@RafaelPiccinelli ôi trời ơi thật là hữu ích! Tôi thậm chí không bao giờ nhận thấy rằng trên đó! Cảm ơn bạn!
eddie_cat

Tôi rất tệ về mã, điều này giúp tôi rất nhiều.
Tay đua SQL

Câu trả lời:


18
USE msdb;
GO
CREATE USER shims FROM LOGIN shims;
GO
ALTER ROLE SqlAgentUserRole ADD MEMBER shims;
GO

Ngoài ra, để tham khảo trong tương lai, bất cứ khi nào bạn biết cách thực hiện điều gì đó trong Giao diện người dùng nhưng không phải trong tập lệnh, đây là Scripttùy chọn trên hầu hết các hộp thoại dành cho - nó sẽ cho bạn biết SSMS sẽ thực thi tập lệnh nào:

nhập mô tả hình ảnh ở đây


3

Nếu bạn muốn thay đổi cơ sở dữ liệu mặc định \ hiện tại thành một cơ sở dữ liệu khác, hãy thử:

alter login <loginname> with default_database = <dbname>;

Bây giờ, tạo một người dùng cho đăng nhập ở trên được tạo

 use <dbname>;
 create user <username> from login <loginname>;

Và bây giờ bạn có thể gán vai trò cho người dùng tạo ở trên để đăng nhập như dưới đây:

use <dbname>
exec sp_addrolemember 'db_owner', '<username>';

3
Từ các tài liệu :This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Use ALTER ROLE instead.
Aaron Bertrand

Vậy tôi có nên thay đổi cơ sở dữ liệu mặc định mỗi lần tôi muốn làm bất cứ điều gì với người dùng này trong msdb không? Trong cửa sổ phía trên có vẻ như bạn có thể có nhiều cơ sở dữ liệu được liên kết với người dùng cùng một lúc ... điều đó có sai không?
eddie_cat

@eddie_cat Không, tôi thấy không có lý do nào trong trường hợp này để thay đổi cơ sở dữ liệu mặc định, trừ khi bạn muốn người dùng đó luôn kết nối với cơ sở dữ liệu nhất định theo mặc định.
Aaron Bertrand

Để tạo người dùng để đăng nhập; cú pháp đúng như sau: ------------------------------------------- ------------------------------ SỬ DỤNG [DatabaseName] GO TẠO NGƯỜI DÙNG [Tên người dùng] ĐỂ ĐĂNG NHẬP [Tên đăng nhập] GO
Kundan Dasange
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.