表的权限问题

mnm0756 2004-10-11 12:45:55
SELECT * FROM [CWAPPTEST].YGCWDB20_NMXJ.cxk.Z_TABZT

其中CWAPPTEST是服务器,YGCWDB20_NMXJ是库,cxk是用户,Z_TABZT是表
但是我用上面的语句
老是提示没有权限,我已经给了SELECT ,INESRT,UPDATE,DELETE的权限了
怎办?

...全文
186 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy__Huang 2004-10-11
  • 打赏
  • 举报
回复
應該這樣寫

SELECT * FROM opendatasource('sqloledb','data source=CWAPPTEST;user ID=用戶名;password=12345').YGCWDB20_NMXJ.cxk.Z_TABZT
mnm0756 2004-10-11
  • 打赏
  • 举报
回复
cxk就是登陆用户
hisi 2004-10-11
  • 打赏
  • 举报
回复
要改变的是你登录用户的权限,而不一定是cxk的权限。
zjcxc 元老 2004-10-11
  • 打赏
  • 举报
回复
我想前面讲得已经很清楚了

[CXK].PUBS.dbo.authors

这里的对象依次是:
链接服务器名.数据库名.所有者名.对象名

注意倒数第二个是所有者名,不是登录的用户名

在你的数据库 PUBS 中,authors 的所有者是 dbo ,而不是用户 CXK

所以:
SELECT * FROM [CXK].PUBS.dbo.authors
有效

SELECT * FROM [CXK].PUBS.CXK.authors
无效,因为根本没有 所有者为 CXK 的 authors 表


而楼主一直没有搞清楚对象的所有者与登录用户的区别
mnm0756 2004-10-11
  • 打赏
  • 举报
回复
我按照上面的试过了
加完权限,
用cxk用户登陆,用SELECT * FROM [CXK].PUBS.dbo.authors,可以查询成功
但是

SELECT * FROM [CXK].PUBS.CXK.authors
不成功提示

服务器: 消息 208,级别 16,状态 1,行 1
对象名 'PUBS.CXK.authors' 无效。


代码如下:



use pubs
go

grant SELECT ,INSERT,UPDATE,DELETE on authors to cxk
exec sp_grantdbaccess 'CXK','CXK'




DECLARE
@SERVERNAME VARCHAR(20),--核算服务器名
@DBNAME VARCHAR(20), --核算数据库名
@USERNAME VARCHAR(20), --核算数据库用户名
@PW VARCHAR(20) --核算数据库密码

SET @SERVERNAME ='CXK'
SET @DBNAME ='PUBS'
SET @USERNAME ='CXK'
SET @PW =''

---------------------------增加LINKSERVER-----------------------------
DECLARE
@BSNEW INT,
@SQL VARCHAR(8000),
@REPLSVR VARCHAR(20),
@UNAME VARCHAR(20),
@LINKSTR VARCHAR(60)

SELECT @BSNEW = COUNT(*) FROM MASTER.DBO.SYSSERVERS WHERE SRVNAME = @SERVERNAME
IF (@BSNEW<>1) OR ( @BSNEW IS NULL)
BEGIN
SET @SQL = 'EXEC SP_ADDLINKEDSERVER @SERVER=''' + @SERVERNAME + ''''
EXEC(@SQL)
END

SET @SQL = 'EXEC SP_ADDLINKEDSRVLOGIN @RMTSRVNAME =''' + @SERVERNAME+ ''',@USESELF = FALSE,@RMTUSER = ''' + @USERNAME + ''',@RMTPASSWORD = ''' + @PW + ''''
EXEC(@SQL)

SET @REPLSVR = ' [' + @SERVERNAME + ']'
IF UPPER(@USERNAME) = 'SA'
SET @UNAME = 'DBO'
ELSE
SET @UNAME = @USERNAME
SET @LINKSTR = @REPLSVR + '.' + @DBNAME + '.' + @UNAME + '.'


-----------------------------------------------------------------------
PRINT @LINKSTR

SELECT * FROM [CXK].PUBS.CXK.authors
zjcxc 元老 2004-10-11
  • 打赏
  • 举报
回复
写出你创建链接服务器的语句.
zjcxc 元老 2004-10-11
  • 打赏
  • 举报
回复
SELECT * FROM [CWAPPTEST].YGCWDB20_NMXJ.cxk.Z_TABZT

cxk 是指表的所有者,而不是登录的用户,执行这个语句的权限是由登录的用户权限决定,而不是 cxk
General521 2004-10-11
  • 打赏
  • 举报
回复
SELECT * FROM [CWAPPTEST].YGCWDB20_NMXJ.cxk.Z_TABZT
在你的的这个查询语句中:cxk是数据库中的用户名,对其赋予权限:(这个在你的服务器上做)
先用sa登录:
grant SELECT ,INESRT,UPDATE,DELETE on Z_TABZT to cxk
然后做登录与数据库用户的映射:
exec sp_grantdbaccess '服务器上的登录','cxk'
在你的客户端:
创建连接服务器:
exec sp_addlinkedserver '[CWAPPTEST]','','SQLOLEDB','服务器的IP'
exec sp_addlinkedsrvlogin '[CWAPPTEST]','false','你的登录','服务器上的登录','服务器上的登录密码'
分布式查询:
select * from [CWAPPTEST].YGCWDB20_NMXJ.cxk.Z_TABZT

select * from openquery([CWAPPTEST],'select * from YGCWDB20_NMXJ.cxk.Z_TABZT')


mnm0756 2004-10-11
  • 打赏
  • 举报
回复
我用的是sp_addlinkedserver,用sa就可以,但是用cxk就不行
还需要加什么权限码?

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧