我遇到了一个反复出现的问题,即用户在TEMPDB中的CREATE SYNONYM权限正在丢失。这些权限似乎永远不会持久存在吗?
我得到的错误:
> System.Data.SqlClient.SqlException (0x80131904): CREATE SYNONYM
> permission denied in database 'tempdb'
答案 0 :(得分:1)
我给你留下了评论,但你可以做的是以下
在master数据库中创建一个proc,在proc中给出tempdb的权限(如果使用动态sql,可以在proc中使用USE tempdb)
然后将proc标记为在启动时运行
exec sp_procoption N'MyProcName', 'startup', 'on'
现在每次重启sql server时,此proc都会运行并赋予权限
另见List all stored procedures that run at startup in SQL Server
答案 1 :(得分:0)
每次重新启动服务器时,都会将tempdb创建为model数据库的副本。我的猜测是,在您向用户授予权限和收到此错误消息之间会发生服务器重新启动。也就是说,您可以在模型中授予权限,在服务器重新启动时它将在tempdb中,或者您可以执行类似创建启动存储过程以在tempdb中授予权限的操作。