表的权限问题 要改变的是你登录用户的权限,而不一定是cxk的权限。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 應該這樣寫SELECT * FROM opendatasource('sqloledb','data source=CWAPPTEST;user ID=用戶名;password=12345').YGCWDB20_NMXJ.cxk.Z_TABZT 我用的是sp_addlinkedserver,用sa就可以,但是用cxk就不行还需要加什么权限码? 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') SELECT * FROM [CWAPPTEST].YGCWDB20_NMXJ.cxk.Z_TABZTcxk 是指表的所有者,而不是登录的用户,执行这个语句的权限是由登录的用户权限决定,而不是 cxk 我按照上面的试过了 加完权限, 用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 我想前面讲得已经很清楚了[CXK].PUBS.dbo.authors这里的对象依次是:链接服务器名.数据库名.所有者名.对象名注意倒数第二个是所有者名,不是登录的用户名在你的数据库 PUBS 中,authors 的所有者是 dbo ,而不是用户 CXK所以:SELECT * FROM [CXK].PUBS.dbo.authors有效SELECT * FROM [CXK].PUBS.CXK.authors 无效,因为根本没有 所有者为 CXK 的 authors 表而楼主一直没有搞清楚对象的所有者与登录用户的区别 怎么样能查找表的外键关系 一个语法错误,请帮忙看下 sql server 中使用update openquery 语法的问题,请高手指点... 在SQL server里怎么实现mysql limit函数的功能 在MSSQL2000中建一个表存储文章题目和内容,字段名为name varchar(250),content text 数据库文件被误删如何才能恢复,急 急~~!请问怎么检查SQL的死锁&&如何去调试呀??? 请问有没有取得新插入的记录的id的函数? 请问关于(998)无法访问内存分配的问题 一道高难度的sql面试题目 数据库连接问题!(急,在线等!) 存储过程中,循环语句如何写?
还需要加什么权限码?
在你的的这个查询语句中: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')
加完权限,
用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
链接服务器名.数据库名.所有者名.对象名注意倒数第二个是所有者名,不是登录的用户名在你的数据库 PUBS 中,authors 的所有者是 dbo ,而不是用户 CXK所以:
SELECT * FROM [CXK].PUBS.dbo.authors
有效SELECT * FROM [CXK].PUBS.CXK.authors
无效,因为根本没有 所有者为 CXK 的 authors 表
而楼主一直没有搞清楚对象的所有者与登录用户的区别