2014-01-29 6 views
3

Я собираюсь создать что-то вроде Visual Studio «Добавить соединение», мои пользователи могут ввести имя сервера базы данных, имя пользователя &, а затем они могут получить список доступных базы данных (только для введенного имени пользователя/пароля) или ошибка должна отображаться, если введенная информация неверна. Я использовал следующий код, который возвращает все базы данных на сервере:SQL server 2008 поиск баз данных, принадлежащих определенному пользователю

  using (var con = new SqlConnection("Data Source=" + txtServername.Text + "; User ID=" + txtUsername.Text + ";Connect Timeout=200;pooling=false;Password=" + txtPassword.Text)) 
     { 
      con.Open(); 
      DataTable databases = con.GetSchema("Databases"); 
      foreach (DataRow database in databases.Rows) 
      { 
       String databaseName = database.Field<String>("database_name"); 
       short dbID = database.Field<short>("dbid"); 
       DateTime creationDate = database.Field<DateTime>("create_date"); 
      } 
     } 

Как ограничить результаты в базах данных, принадлежащих указанному пользователю?

ответ

3

Вы можете использовать этот запрос (от this article) и добавить пункт WHERE вам нужно на owner_sid:

SELECT name, SUSER_SNAME(owner_sid) 
FROM sys.databases 

Для базы данных предоставляются перечисление доступа, следуя that thread, вы можете использовать этот запрос, и добавить необходимый WHERE заявление:

CREATE TABLE #tempww (
    LoginName nvarchar(max), 
    DBname nvarchar(max), 
    Username nvarchar(max), 
    AliasName nvarchar(max) 
) 

INSERT INTO #tempww 
EXEC master..sp_msloginmappings 'sa' -- REPLACE IT BY YOUR USERNAME PARAMETER 

-- display results 
SELECT DBname 
FROM #tempww 
WHERE LoginName='sa' -- REPLACE IT BY YOUR USERNAME PARAMETER 
ORDER BY dbname, username 

-- cleanup 
DROP TABLE #tempww 
+0

Спасибо, но он дает «sa» как пользователь, как я могу найти правильное имя моего пользователя? –

+0

Определите «правильный»? Вам нужно что-то еще, кроме отношения «собственности»? (например, предоставленный доступ) – cubitouch

+0

У меня есть несколько баз данных на моем сервере (более 30), но этот специальный пользователь (например, user1) имеет только одну базу данных, я хочу иметь только эту базу данных, но кажется, что «sa» возвращается как имя пользователя всех баз данных, как я могу найти USERNAME из моих баз данных? –

Смежные вопросы