我創建了一個datareader有權訪問用戶資料庫的 SQL Server 用戶。
為什么這個用戶自動擁有洗掉/創建本地/全域臨時表的權限?
問題是任何用戶都可能會弄亂其他用戶或應用程式創建的全域臨時表。
uj5u.com熱心網友回復:
基本上,datareader 用戶創建的臨時表是在 tempDB 資料庫上創建的。默認情況下,任何用戶都可以在 tempdb 資料庫中創建物件,除非明確拒絕。
參考 tempdb 權限參考
任何用戶都可以在 tempdb 中創建臨時物件。用戶只能訪問他們自己的物件,除非他們獲得額外的權限。可以撤銷對 tempdb 的連接權限以防止用戶使用 tempdb。我們不推薦它,因為一些日常操作需要使用 tempdb。
例如,在下面的 sql 代碼中,我正在創建一個 user ,它只是具有public角色。它還能夠創建臨時表。public當您在資料庫中為登錄添加用戶時,默認情況下會提供資料庫角色。閱讀有關公共角色的更多資訊
use master
go
create database testperm
go
create login testpermlogin with password = 'Somecomplexpassword123#'
go
use testperm
go
create user testpermuser for login testpermlogin
go
execute as user ='testpermuser'
go
select USER_NAME()
go
create table #test(a int)
go
uj5u.com熱心網友回復:
問題是任何用戶都可能會弄亂其他用戶或應用程式創建的全域臨時表。
這只是不使用全域臨時表的另一個原因。它們不是很有用,而且極少使用。
我想不出使用本地臨時表、TempDb 中的永久表或用戶資料庫中的常規表不會更好的場景。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401906.html
標籤:sql-server
上一篇:從活動日期獲取當前價格
下一篇:基于計算轉換SQLServer表
