我自建的登录用户无对tempdb的select,insert等权限,怎么办?

101010 2003-04-04 01:17:43
我自建的登录用户无对tempdb的select,insert等权限,当然,我可以手动加将这个用户填加到tempdb数据库中,担是tempdb在机器重启后就重建,也就是说tempdb中那个我建的用户就没有了,这可怎么解决?
...全文
58 点赞 收藏 24
写回复
24 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
101010 2003-04-11
因为我要对session的号码进行查询,这个问题现在算是基本解决了吧
回复
seth99 2003-04-06
哈,我大概明白你遇到什么问题了,是不是ASP.NET的web.config里的userid不能用,你要赋予它sa的权限,没办法,Ms的冬冬在他还没有大面积推广宣传的时候是比较粗糙
回复
seth99 2003-04-06
to 101010(1010):
你说的文字基本都对,但是一个关键的问题,你要干什么?????
用sa执行InstallSqlState.sql create DB:ASPState,添加一个ASPState的dbo,设好web.config,一切就ok了,其他就是ASP.NET与SQL Server的事了,那来那么多tempdb的事???
Yes,他用了一个启动脚本:ASPState_Startup初始化的他的环境和一个Job:ASPState_Job_DeleteExpiredSessions清理旧数据,但那事他自己run的,不需要人操心的,你不是想自己用程序去完成这些功能吧?! @_@
回复
laokedou 2003-04-05
学习
回复
littlestoneyi 2003-04-05
1 : 你的数据怎么可能放在TEMPDB中呢?里面的数据是不可能保存到下次启动的啊。这样的话你的数据不用在一段时间存在么?
2 :新建登陆的时候你应该选择数据库,添加服务器角色,数据库角色
3 :TEMPDB tempdb 数据库保存所有的临时表和临时存储过程。它还满足任何其它的临时存储要求,例如存储 SQL Server 生成的工作表。tempdb 数据库是全局资源,所有连接到系统的用户的临时表和存储过程都存储在该数据库中。tempdb 数据库在 SQL Server 每次启动时都重新创建,因此该数据库在系统启动时总是干净的。临时表和存储过程在连接断开时自动除去,而且当系统关闭后将没有任何连接处于活动状态,因此 tempdb 数据库中没有任何内容会从 SQL Server 的一个会话保存到另一个会话。

‘ 因此该数据库在系统启动时总是干净的’,在上面创建登陆以后能不能保存用户,你试一下。


回复
cenxaoi 2003-04-05
不错不错,向你学习。
回复
101010 2003-04-05
各路大侠,共同探讨,共同提高,我也查了一些内容,整理一下,我再总结一下,看完后请继续讨论:
1- jimmyxing,tempdb数据库会重建,所有我就是手动加用户和权限,下次重启也什么都没了.

2- cenxaoi,我查了一下联机帮助,这是摘抄:
本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 Microsoft® SQL Server™ 2000 实例断开连接时被删除。全局临时表的名称以数学符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除,例如,如果创建名为 employees 的表,则任何人只要在数据库中有使用该表的安全权限就可以使用该表,除非它已删除。如果创建名为 #employees 的本地临时表,只有您能对该表执行操作且在断开连接时该表删除。如果创建名为 ##employees 的全局临时表,数据表中的任何用户均可对该表执行操作。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果该表在您创建后有其他用户使用,则 SQL Server在所有用户断开连接后删除该表。
而且,我这个问题是tempdb数据库在每次重启时会完全的重建,而我要用到的两个表是随tempdb一同在最开始建立的,就是说虽也是在启动时重建,而在使用时却不能当做#的临时表来用,而又无法显示调用,这就引到了 littlestoneyi

3- littlestoneyi,这个与管理员组有关么?怎么把库加入什么组?而tempdb每次要重建,即使加入,下次重启岂不是仍旧如前?但是我还是想知道怎么加入组?请说说,我又发现作业可以实现在每次启动SQL ServerAgent时执行T-SQL脚本,它与sp_procoption不同,后者是在SQL Server启动时执行一个master中的存储过程,但是怎么在master库中用这个存储过程实现在另一个库中建用户,并给其权限?(不必非tempdb库)
EXEC sp_grantdbaccess 'aspnetsession','aspnetsession' --建数据访问
GRANT ALL TO aspnetsession --赋予所有权限
EXEC sp_addrolemember 'db_owner', 'aspnetsession' --赋予数据库的角色
可是那个建数据库访问是在当前库中建访问,不是跨库建访问怎么办呐??

4-seth99 ASP.NET的SQLServer的Session管理脚本自动建库ASPState,并也用了sp_procoption在master库中建了存储过程ASPState_Startup,来在启动时在tempdb库中建表ASPStateTempApplications和ASPStateTempSessions,数据是存在这里的
回复
101010 2003-04-05
seth99,ASP.NET我也是在研究,如是我没看错的话,它是建了一个库ASPState,不过实际上Session数据是存储在tempdb中的,不信,你看看!

还有我这个表是全局临时表。我是想用sp_procoption在SQL Server 一启动就在tempdb中建一个有db_owner的用户???怎么建?或者有其它方法?
回复
seth99 2003-04-04
都不懂你再说什么?
ASP.NET的Session是可以存在SQL Server的DB中的,不是TempDB!!!!
==========================================================================
在web.config的sessionState部分:

<sessionState mode="SQLServer" sqlConnectionString="data source=mySession;userid=yourID;password=aftertoyou" cookieless= "false" timeout="20"
/>
==========================================================================
回复
cenxaoi 2003-04-04
全局临时表实际上是在一条连接中全局
局部临时表是指在存储过程中建立的临时表

在一条连接中 建立一个临时表在这个连接断之前 这个临时表一直存在 叫做全局临时表
在这条连接上可以调用一个存储过程 过程里面也可以建立一张与全局临时表同名局部临时表

先建立一个存储过程 过程里建立一个局部临时表
create proc a
as
create table #a (i varchar(50))
局部临时表在过程结束后被删掉

然后
create table #a (i varchar(50)) --建立一张全局临时表
go
exec a --建立一张局部临时表并删掉
回复
101010 2003-04-04
还有,littlestoneyi,我是在SQL Serverk 中建的一个登录用户,不是什么管理员组,你问的管理员组是指Windows的管理员组吧,在SQL Server中应该没有管理组吧,因为没有组的概念吧?
回复
weixiao51 2003-04-04
是dbo.#a中dbo由问题吧,
select * from tempdb..#a
insert tempdb..#a values ()
试试
回复
101010 2003-04-04
啊哈,越说问题越多了,总结一下:是这样,我现研究做一个ASP.NET+SQL Server和东东,ASP.NET的Session管理有四种,其中我选择了我认为最好的SQLServer,就是把Session数据自动存储在SQL Server数据库中,这个是微软提供的功能,不是我手动做的,可是我想查询当时的数据信息,可是无select,insert等权限,所以我就想填加用户,可一重启就没了,谢谢大家帮助,再谈谈:
littlestoneyi,tempdb是临时库,什么叫全局临时表还是局部临时表,我不懂啊。
回复
101010 2003-04-04
cenxaoi,我显示调用是因为在开发ASP.NET的Session时,必须得显示式的用到tempdb中的数据,因为ASP.NET的Session管理在配置成SQLServer时,数据自动存储在tempdb中,而每次重启就一切消失,就是这样。呵,理解万岁。
回复
littlestoneyi 2003-04-04
问一下哦。你的用户是管理员组么?这个应该是可以调用了。
可能是你的临时表的生存周期的问题。

全局临时表还是局部临时表????
回复
littlestoneyi 2003-04-04
让数据库一启动就执行存储过程:

创建一个作业,作业的内容就是执行存储过程了啊。
在作业的调度中选择:每次启动SQL的时候。

保存作业。
回复
cenxaoi 2003-04-04
你要显式调用干什么。
每一条连接创建的每一张临时表的名字可以相同
如A连接创建临时表 #a 在A连接中 这个表叫做#a 但你去查询分析器看一下,不要断掉原来的连接 那个表名是 #a_____________________________________________________数字后缀
Server 会为不同的连接创建的临时表做后缀 ,不同连接是不能访问别的连接建立的临时表。
临时库临时表中如何管理对于程序员来说是透明的。
你可能不理解临时表的机制。才想显示调用tempdb
回复
101010 2003-04-04
我不知怎么才能让数据库一启动就执行存储过程
回复
wuqiuzhi 2003-04-04
这样吧,写一个存储过程,每次进入的时候调用一次,产生这个登陆用户
回复
101010 2003-04-04
wuqiuzhi,tempdb数据库是临时数据库,这个我刚刚问别人才知道的,每次机器重启后,tempdb数据库会重建,所有填加的用户当然就没有了。继续求助中……
回复
加载更多回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2003-04-04 01:17
社区公告
暂无公告