Server tertaut tersedia untuk pengguna tanpa izin

9

Saya memiliki pengguna melihat server tertaut yang seharusnya tidak mereka lihat.

Server tertaut ditentukan sehingga hanya saya yang akan memiliki akses ke sana, tetapi semua orang dapat melihat dan menggunakannya.

Saya telah membuat server tertaut baru menggunakan langkah-langkah berikut:

  1. Hubungkan SSMS Object Explorer ke instance SQL Server
  2. Rentangkan Server Objects, klik kanan Linked Serversdan klik kiriNew Linked Server...
  3. Di bawah Generaltab memilih SQL Serveruntuk Server typedan menulis nama Server
  4. Di bawah Securitytab di bagian atas klik Add, pilih "sa" sebagai Local Login, masukkan Remote Usernama danRemote Password
  5. Di bawah Securitytab di bagian bawah (bawah For a login not defined in the list above, connections will:) pilih opsi pertama:Not be made
  6. Klik OKdan mulai pengujian

Sekarang satu-satunya orang yang seharusnya melihat server tertaut adalah saya ("sa"), tetapi entah bagaimana pengguna lain dapat melihatnya dan menggunakannya.

Catatan 1: Pengguna yang dapat menggunakan server yang ditautkan memiliki izin pada server jarak jauh, mereka tidak melihat data yang seharusnya tidak mereka lihat, mereka hanya dapat mengaksesnya dari server yang ditautkan ketika mereka seharusnya tidak dapat melihatnya.

Catatan 2: Saya satu-satunya sysadmindi kedua contoh.

Roi Gavish
sumber
1
Ya, Anda tidak bisa menyembunyikan server yang ditautkan, tetapi ketika mereka mencoba menggunakannya, jika konteks login mereka saat ini tidak memiliki izin di ujung sana ...
Aaron Bertrand
@ AaronBertrand Anda dapat menyembunyikan server yang ditautkan hanya dengan tidak menyediakan akses ke sana. Login yang tidak didefinisikan dalam daftar login yang diizinkan dan bukan sysadmin tidak dapat melihat server yang terhubung di objek explorer.
Roi Gavish
@ AaronBertrand Jika konteks login mereka saat ini memang memiliki izin di ujung lainnya, mereka tetap tidak dapat terhubung melalui server yang ditautkan jika tidak diizinkan.
Roi Gavish
1
Tidak, Anda tidak dapat menyembunyikan server tertaut dengan cara itu. Sudahkah Anda mencoba ini?
Aaron Bertrand

Jawaban:

7

Tidak ada cara untuk "menyembunyikan" server yang ditautkan atau mencegah pengguna yang tidak sah mencoba menggunakannya. Yang dapat Anda kontrol adalah apakah mereka benar-benar memiliki akses di sisi lain. Server yang ditautkan di dalam dan dari dirinya sendiri bukan objek yang sebenarnya; seperti sinonim, Anda tidak memberikan akses ke alias, hanya untuk hal yang dirujuk.

Cobalah, dan Anda akan melihat bahwa beberapa asumsi Anda (mis. Bahwa "login ... tidak dapat melihat server yang ditautkan dalam objek explorer") salah. Saya melakukan ini:

  1. Membuat login, dan tidak diberikan hak istimewa apa pun, cukup HUBUNGI / peran publik.
  2. Membuat server tertaut, dan tidak menambahkan login ini ke daftar login.
  3. Membuka instance baru Studio Manajemen, terhubung dengan login ini.
  4. Saya dapat melihat semua server yang ditautkan di bawah Server Objects> Linked Server.
  5. Saya juga dapat meminta sys.serversuntuk melihat daftar server yang terhubung.

Saya dapat menjalankan permintaan berikut tanpa masalah:

SELECT name FROM [linked server].master.sys.objects;

Namun saya tidak dapat menjalankan query terhadap database non-sistem, karena saya belum memberikan akses eksplisit ke database non-sistem atau objek di dalamnya. Misalnya:

SELECT SalesOrderID FROM [linked server].AdventureWorks2012.Sales.SalesOrderHeader;

Menghasilkan kesalahan ini:

Msg 7314, Level 16, State 1, Line 1
Penyedia OLE DB "SQLNCLI11" untuk server tertaut "server tertaut" tidak mengandung tabel "" AdventureWorks2012 "." Penjualan "." SalesOrderHeader "". Tabel tersebut tidak ada atau pengguna saat ini tidak memiliki izin pada tabel itu.

Saya berharap Anda dapat mencapai hasil yang lebih ketat dengan secara eksplisit menolak akses ke objek tertentu pada server yang ditautkan (atau dengan DENY CONNECT SQLlogin itu secara bersamaan), tetapi ini tidak membatasi efeknya pada server yang ditautkan; itu juga mempengaruhi koneksi langsung.

Bagaimanapun, saya gagal melihat titik dari apa yang ingin Anda capai:

  1. Jika pengguna tidak memiliki akses di sisi lain, apa salahnya membiarkan mereka mencoba ? (Anda mungkin lebih beruntung mengatakan kepada mereka untuk tidak dan mengaudit mereka daripada mencoba mencegah mereka mencoba sejak awal.)
  2. Jika pengguna memang memiliki akses di sisi lain, mengapa mereka tidak dapat menggunakan server yang ditautkan?
Aaron Bertrand
sumber
2

Anda dapat menggunakan opsi pertama "Tidak dibuat dengan" pemetaan login seperti di bawah ini:

masukkan deskripsi gambar di sini

Inilah hasilnya dengan login yang dipetakan:

masukkan deskripsi gambar di sini

Dan inilah yang terjadi dengan akun lain

masukkan deskripsi gambar di sini

PollusB
sumber