Làm cách nào tôi có thể thay đổi cơ sở dữ liệu mặc định của mình trong SQL Server mà không cần sử dụng MS SQL Server Management Studio?


166

Tôi đã bỏ cơ sở dữ liệu từ SQL Server, tuy nhiên hóa ra thông tin đăng nhập của tôi đã được đặt để sử dụng cơ sở dữ liệu bị hủy làm mặc định. Tôi có thể kết nối với SQL Server Management Studio bằng cách sử dụng nút 'tùy chọn' trong hộp thoại kết nối và chọn 'master' làm cơ sở dữ liệu để kết nối. Tuy nhiên, bất cứ khi nào tôi cố gắng làm bất cứ điều gì trong trình thám hiểm đối tượng, nó sẽ cố gắng kết nối bằng cơ sở dữ liệu mặc định của tôi và không thành công.

Có ai biết làm thế nào để thiết lập cơ sở dữ liệu mặc định của tôi mà không cần sử dụng object explorer không?

Câu trả lời:


38

Thay thế cho sp_defaultdb ( sẽ bị xóa trong phiên bản Microsoft SQL Server trong tương lai ) có thể là ALTER LOGIN:

ALTER LOGIN [my_user_name] WITH DEFAULT_DATABASE = [new_default_database]

Lưu ý: không giống như tên sp_defaultdbngười dùng và cơ sở dữ liệu được cung cấp mà không có dấu ngoặc kép. Chân đế là cần thiết nếu tên có ký tự đặc biệt (ví dụ phổ biến nhất sẽ là người dùng miền là tên miền \ tên người dùng và sẽ không hoạt động mà không có dấu ngoặc).


1
Vâng, câu hỏi này đang trở nên hơi cũ bây giờ. Tại thời điểm tôi đang sử dụng SQL 2005. Đăng nhập thay đổi không được thêm cho đến phiên bản 2008.
Martin Brown

@MartinBrown Có, tôi đã sử dụng sp_deafultdbtừ lâu. Tôi đã ngạc nhiên rằng có một cách "mới".
Marek

Lưu ý: dấu ngoặc đơn không cần thiết xung quanh các trường my_user_name hoặc cơ sở dữ liệu và có thể gây ra lỗi. Rõ ràng với đôi tay có kinh nghiệm nhưng có lẽ không phải như vậy với những người làm điều này đôi khi. Dấu ngoặc vuông tùy chọn, nếu các trường đại diện cho văn bản liền kề.
iokevins

Tôi kết nối với cơ sở dữ liệu SẢN PHẨM thông qua một nhóm, vì vậy tôi không có Đăng nhập cá nhân trên máy chủ, khi tôi cố gắng chạy ở trên, tôi nhận được "Không thể thay đổi thông tin đăng nhập 'DOMAIN \ myuser', vì nó không tồn tại hoặc bạn không được phép. ". thậm chí tệ hơn khi tôi ở trong nhiều nhóm vì mỗi nhóm cho tôi quyền truy cập cụ thể vào một trong nhiều DB trên máy chủ. Gợi ý?
matao

1
Để tìm cơ sở dữ liệu mặc định của thông tin đăng nhập là gì: chọn tên, default_database_name từ sys.server_principals;
DocOc

215

Những gì bạn có thể làm là thiết lập cơ sở dữ liệu mặc định của mình bằng thủ tục lưu trữ hệ thống sp_defaultdb. Đăng nhập như bạn đã làm và sau đó nhấp vào nút Truy vấn mới. Sau đó, chỉ cần chạy lệnh sp_defaultdb như sau:

Exec sp_defaultdb @loginame='login', @defdb='master' 

Cảm ơn thực sự. Hoạt động như một cơ duyên (và dạy tôi về cuộc đối thoại 'Tùy chọn' để chỉ định db).
penderi

Câu hỏi này đã đặt ra một câu hỏi về meta
abel

1
Sẽ không hoạt động tốt nếu bạn thuộc nhóm AD và bạn không muốn thay đổi cơ sở dữ liệu mặc định cho hàng chục nhà phát triển khác.
DOK

@DOK: Nhưng tôi sẽ cho rằng nếu đăng nhập của bạn bị hỏng theo cách này thì tất cả các nhà phát triển khác cũng vậy. Vì vậy, sửa chữa nó cho tất cả trong số họ chắc chắn sẽ là một điều tốt?
Martin Brown

Chà, có hàng tá cơ sở dữ liệu khác nhau về phiên bản SQL Server cụ thể này. Tất cả chúng ta sẽ muốn một cơ sở dữ liệu mặc định khác nhau. Nếu chúng ta tạo một nhóm người dùng khác nhau cho mỗi cơ sở dữ liệu để nó có thể có cơ sở dữ liệu mặc định mong muốn, thì tất cả chúng ta sẽ phải ở trong một nhóm các nhóm người dùng khác nhau nếu chúng ta muốn xem các cơ sở dữ liệu khác nhau, và sau đó chúng ta sẽ mất mặc định mong muốn. Tôi ước có một cách trong Management Studio để sửa cơ sở dữ liệu mặc định, nhưng cho đến nay tôi vẫn chưa tìm thấy một cách tiếp cận nào thực sự hiệu quả.
DOK

49

Để thực hiện theo cách GUI, bạn cần phải chỉnh sửa thông tin đăng nhập của mình. Một trong những thuộc tính của nó là cơ sở dữ liệu mặc định được sử dụng cho lần đăng nhập đó. Bạn có thể tìm thấy danh sách đăng nhập dưới nút Đăng nhập dưới nút Bảo mật. Sau đó chọn đăng nhập của bạn và nhấp chuột phải và chọn Thuộc tính. Thay đổi cơ sở dữ liệu mặc định và cuộc sống của bạn sẽ tốt hơn!

Lưu ý rằng ai đó có quyền riêng tư sysadmin cần có thể đăng nhập để làm điều này hoặc để chạy truy vấn từ bài viết trước.


cái này hoạt động tốt chỉ cần gõ vào đó "master" db thay vì "default".
apprich

1
Vấn đề tôi gặp phải là tôi là sysadmin và đã xóa cơ sở dữ liệu mà tôi đã đặt thành mặc định và như vậy thậm chí không thể vào hộp thoại này.
Martin Brown

@MartinBrown là như có thể, tôi đã không bỏ bất kỳ bảng nào và tôi vẫn được dẫn đến câu hỏi của bạn, nhưng cảm thấy thoải mái hơn với giải pháp GUI.
djv

41

Nhờ bài đăng này , tôi tìm thấy một câu trả lời dễ dàng hơn:

  1. Mở Studio quản lý máy chủ Sql

  2. Chuyển đến đối tượng Explorer -> Bảo mật -> Đăng nhập

  3. Nhấp chuột phải vào đăng nhập và chọn thuộc tính

  4. Và trong cửa sổ thuộc tính thay đổi cơ sở dữ liệu mặc định và bấm OK.


1
Chào mừng bạn đến với StackOverflow và cảm ơn vì đã cung cấp câu trả lời. Bạn có thể muốn xem các tính năng của trình soạn thảo Markdown, vì vậy bạn có thể định dạng các khối mã, danh sách, v.v.: Stackoverflow.com/editing-help . Tôi đã chỉnh sửa câu trả lời của bạn để cải thiện định dạng cho bạn.
Paul Turner

Toàn bộ vấn đề của câu hỏi này là những gì bạn đã mô tả không hoạt động nếu bạn đã xóa cơ sở dữ liệu mặc định cho tài khoản đăng nhập của riêng bạn . Trong trường hợp cụ thể của tôi, tôi là quản trị viên duy nhất trong hệ thống nên không thể sử dụng tài khoản của người khác để đạt được hiệu quả tương tự.
Martin Brown

@Mattijs Hy vọng bạn đọc dòng cuối cùng của câu hỏi "Có ai biết cách đặt cơ sở dữ liệu mặc định của tôi mà không sử dụng trình thám hiểm đối tượng không?". Đó chỉ là những gì bạn đã yêu cầu làm.
Rohit Vipin Mathews

2
Điều này có thể không trả lời câu hỏi của OP, nhưng nó đã trả lời câu hỏi của tôi. Đó là một câu trả lời hữu ích.
CJ Dennis

1
Điều này là không thể tại Cơ sở dữ liệu Azure: /
Squazz

14

Nếu bạn không có quyền thay đổi DB mặc định của mình, bạn có thể chọn thủ công một DB khác ở đầu truy vấn của mình ...

USE [SomeOtherDb]
SELECT 'I am now using a different DB'

Sẽ hoạt động miễn là bạn có quyền với DB khác


8
  1. Nhấp vào biểu tượng Thay đổi kết nối
  2. Nhấp vào Tùy chọn <<
  3. Chọn db từ thả xuống Kết nối với cơ sở dữ liệu

Vì một số lý do, điều này đã làm việc cho tôi trong một số trường hợp chứ không phải trong những trường hợp khác.
levininja

3

Tôi cũng sẽ thích ALTER LOGINLệnh như trong câu trả lời được chấp nhận và mô tả ở đây

Nhưng đối với người yêu GUI

  1. Chuyển đến [INSTANCE SERVER] -> Bảo mật -> Đăng nhập -> [ĐĂNG NHẬP CỦA BẠN]
  2. Nhấp chuột phải vào [ĐĂNG NHẬP CỦA BẠN]
  3. Cập nhật tùy chọn cơ sở dữ liệu mặc định ở cuối trang

Mệt mỏi vì đọc !!! chỉ cần nhìn vào sau

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



0

Điều này có thể hoặc không thể trả lời chính xác câu hỏi, nhưng tôi đã gặp phải vấn đề này (và câu hỏi) khi tôi đã thay đổi tài khoản của mình để có một cơ sở dữ liệu mới mà tôi đã tạo làm "cơ sở dữ liệu mặc định" của mình. Sau đó, tôi đã xóa cơ sở dữ liệu đó và muốn kiểm tra tập lệnh tạo của tôi, từ đầu. Tôi đã đăng xuất SSMS và sẽ quay trở lại, nhưng bị từ chối - không thể đăng nhập vào cơ sở dữ liệu mặc định là lỗi. Ôi!

Những gì tôi đã làm là, trên hộp thoại đăng nhập cho SSMS, đi đến Tùy chọn, Thuộc tính kết nối, sau đó nhập mastervào hộp tổ hợp "Kết nối với cơ sở dữ liệu". Nhấp vào Kết nối. Cho tôi vào. Từ đó bạn có thể chạy lệnh tới:

ALTER LOGIN [DOMAIN\useracct] WITH DEFAULT_DATABASE=[master]
GO

-1

Nếu bạn sử dụng xác thực windows và bạn không biết mật khẩu để đăng nhập với tư cách người dùng thông qua tên người dùng và mật khẩu, bạn có thể thực hiện việc này: trên màn hình đăng nhập trên các tùy chọn nhấp chuột SSMS ở dưới cùng bên phải, sau đó chuyển đến tab thuộc tính kết nối . Sau đó, bạn có thể nhập thủ công tên của cơ sở dữ liệu khác mà bạn có quyền truy cập, qua nơi nó nói, sẽ cho phép bạn kết nối. Sau đó làm theo lời khuyên khác để thay đổi cơ sở dữ liệu mặc định của bạn

https://gyazo.com/c3d04c600311c08cb685bb668b569a67

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.