代码之家  ›  专栏  ›  技术社区  ›  variable

为什么拥有用户数据库数据读取器权限的sql用户也有权删除/创建本地/全局临时表?

  •  0
  • variable  · 技术社区  · 3 年前

    我用创建了一个SQL Server用户 datareader 对用户数据库的权限。

    为什么此用户自动拥有删除/创建本地/全局临时表的权限?

    问题是,任何用户都可以随意使用其他用户或应用程序创建的全局临时表。

    1 回复  |  直到 3 年前
        1
  •  1
  •   Venkataraman R    3 年前

    基本上,数据读取器用户正在创建的临时表是在tempDB数据库上创建的。默认情况下,除非明确拒绝,否则任何用户都可以在tempdb数据库中创建对象。

    Refer to tempdb permissions reference

    任何用户都可以在tempdb中创建临时对象。用户只能访问 他们自己的对象,除非他们获得额外的权限。它是 可以吊销对tempdb的连接权限以阻止用户 从使用tempdb。我们不推荐它,因为有些常规 操作需要使用tempdb。

    例如,在下面的sql代码中,我正在创建一个用户,它只是 public 角色它还可以创建临时表。 平民的 当您为数据库中的登录添加用户时,默认情况下会提供数据库角色。 Read more about public role

    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
    
        2
  •  0
  •   David Browne - Microsoft    3 年前

    问题是,任何用户都可以随意使用其他用户或应用程序创建的全局临时表。

    这只是不使用全局临时表的又一个原因。它们不是很有用,而且很少使用。

    我想不出有哪个场景会更好地使用本地临时表、TempDb中的永久表或用户数据库中的常规表。