實驗測試之------創建DBlink,查詢遠端的yang用戶下的abcdedfa表,創建同義詞

来源:http://www.cnblogs.com/lvcha001/archive/2017/10/23/7716496.html
-Advertisement-
Play Games

--測試環境,20遠端,30本地; --準備1,20遠端建立表的同義詞,用戶信息; 1.11 準備階段,有表有用戶可以忽略此步驟 SQL> conn yang/y ERROR: ORA-01017: invalid username/password; logon denied --無效的用戶名密碼 ...


--測試環境,20遠端,30本地;

 

--準備1,20遠端建立表的同義詞,用戶信息;

1.11

---------------------------------------------------準備階段,有表有用戶可以忽略此步驟-------------------------------------------------------------------

SQL> conn yang/y ERROR: ORA-01017: invalid username/password; logon denied --無效的用戶名密碼,拒絕進入系統

Warning: You are no longer connected to ORACLE.警告:你是不能嘗試連接到oracle

SQL> desc dba_users; ----查詢視圖

SQL> select USERNAME,USER_ID,ACCOUNT_STATUS,LOCK_DATE,DEFAULT_TABLESPACE from dba_users where username='YANG';

no rows selected --沒有記錄

SQL> create user yang identified by y;  --創建用戶,授予兩個角色

SQL> grant connect,resource to yang;

create table abcdefaefef as select * from hr.employees  --創建表,無法查詢到-表存在,許可權不足導致
                                             *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> grant select any table to yang;----授予許可權後,角色許可權需要在新的用戶會話生效(oracle的一致性:你不能說我正查著dba的視圖,回收許可權後,我報錯,返回許可權不足吧)

SQL> create table abcdefaefef as select * from hr.employees;                       --創建測試表

 SQL>  select USERNAME,USER_ID,ACCOUNT_STATUS,LOCK_DATE,DEFAULT_TABLESPACE from dba_users where username='YANG';---查詢用戶信息

YANG                                  107                    OPEN                   USERS

---------------------------------------------------------------------------------------表、用戶準備完畢------------------

 

1.12:

創建私有同義詞(自己看到 ):

create synonym a for abcdefaefef
*
ERROR at line 1:
ORA-01031: insufficient privileges

--需要許可權:SQL> grant create any synonym to yang;       =========(操作)==========

SQL> create synonym a for abcdefaefef;        ==============(操作)=================

SQL> select count(*) from a;  ---當前用戶可以使用查詢;

select * from yang.a ----SYS用戶也可以查詢,雖然這個同義詞是私有的;

SQL> select count(*) from yang.abcdefaefef; --HR用戶無法查詢表,同義詞更無法識別;

授予許可權,讓Hr能查詢表,驗證能否可以使用同義詞查詢;

SQL>  grant select on yang.abcdefaefef to hr;

SQL> select count(*) from yang.abcdefaefef;

  COUNT(*) ----------        107

SQL>  select count(*) from yang.a;

  COUNT(*) ----------        107

---同義詞,私有情況下,收到的訪問約束局限在於表,而不再與同義詞本身;

 

1.13

---創建公共的同義詞

1)yang用戶創建:

create public synonym b for abcdefaefef
*
ERROR at line 1:
ORA-01031: insufficient privileges

SQL> grant create public synonym to yang;

SQL> create public synonym b for abcdefaefef;----創建公共的同義詞需要的許可權不同;一個表的同義詞可以有多個;

 

2)我們回收用戶創建私有同義詞的許可權,公有的不回收,創建私有同義詞,驗證:

public synonym 許可權能否創建私有同義詞:

SQL> revoke create any synonym from yang;

SQL> select * from session_privs;        ---驗證回收的許可權------發現次許可權會話生效,回收也是;

drop synonym  a;  ---刪除同義詞;

create synonym a for abcdefaefef;

ERROR at line 1:
ORA-01031: insufficient privileges  ----這個許可權有點意思,公有的許可權無法創建私有的同義詞;

 

-----------------反過來呢?

revoke create public synonym from yang;

SQL> grant create  any synonym to yang;

SQL> select * from session_privs;

create public synonym a for abcdefaefef;

 ERROR at line 1:
ORA-01031: insufficient privileges

         

3)         創建公共同義詞a;

然後對比,查詢能查詢數據的用戶對象;

         SQL> grant create public synonym to yang;                                            

 SQL> create public synonym a for abcdefaefef;

---排除創建本身的用戶

--使用SYS用戶查詢:

SQL> select count(*) from a;

  COUNT(*) ----------      87024

SQL> desc a;    ----------------------------發現如果有其它同義詞相同,會造成干擾

--測試HR:用戶查詢公共同義詞

select * from a;----------------------OK,可以查詢到數據

SQL> create table a(id int);   ---創建同義詞的表名,干擾

Table created.

SQL> select * from a;  -----查詢的是本用戶下的表名;

no rows selected------------------------------發現如果用戶下的表名與公共同義詞一樣,也會造成干擾

 

--測試HR,沒有訪問yang.ABCDEFAEFEF表許可權的時候;

SQL> revoke select on  yang.ABCDEFAEFEF from hr;

select count(*) from yang.ABCDEFAEFEF
                          *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> drop table a;

select count(*) from a
                     *
ERROR at line 1:
ORA-00942: table or view does not exist---------沒有訪問表的許可權,同義詞公共也看不到

 

SQL> grant  select on  yang.ABCDEFAEFEF to hr;

SQL> create table a(id int);

select * from yang.ABCDEFAEFEF
SQL> select * from yang.a;
select * from yang.a
                   *
ERROR at line 1:
ORA-00942: table or view does not exist----

---小結:公共同義詞,一樣收到表是否能被訪問的風險;

--同義詞無法username.object指定,無法指定用戶+對象;

--同義詞收到表名、同義詞朋友的干擾,建議名稱奇怪一點好;

--建議查詢同義詞之前先desc 看一下結構是否相同;

 

--查詢同義詞:

ORA-01031: insufficient privileges --公共同義詞也需要許可權才能刪除(grant drop public synonym to yang);

SQL> drop  public synonym b;

SQL> select * from dba_synonyms where table_name='ABCDEFAEFEF';

PUBLIC                         A YANG                           ABCDEFAEFEF

YANG                           B YANG                           ABCDEFAEFEF

-------------------------------------------------------------------------------------------------------------------

以上同義詞準備完畢:共有同義詞a, 私有同義詞b=》用戶yang;

以下開始準備dblink配置

----------------------------------------------------------------------------------------------------------------

 

--創建dblink測試:

dblink,是啥其實就是個連接串,連接到你想查詢的資料庫上;

創建是在自己本地上創建:

 

30本地,abc用戶,想查詢20ip,下的yang用戶下的表;

SQL> select * from session_privs;

SQL> select * from user_sys_privs where privilege like upper('%DATABASE LINK%');           ----查詢資料庫的dblink

no rows selected

create /* public */ database link dblink1 connect to yang identified by y using '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.54.20)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=jx)))';

 

 ---創建完畢:測試:

select * from ab@dblink1
                 *
ERROR at line 1:
ORA-12541: TNS:no listener            -----發現都找不著TNS服務了

 grid$ cd /picclife/app/11.2.0/grid/network/admin/      ---先搞自己的監聽,tns配置

listener.ora       tnsnames.ora

oracle$ sqlplus hr/[email protected]:1521/bj

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

   Instance "bj", status READY, has 1 handler(s) for this service...

時刻準備著為實例xx服務

The command completed successfully  --這個命令是順利成功的;

grid/network/admin$ cat tnsnames.ora
yang2 =
 (DESCRIPTION=
   (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.54.30)(PORT = 1521))
   )
   (CONNECT_DATA=
     (SERVICE_NAME = bj)
   )
  )

$ sqlplus hr/hr@yang2 ==============================以上是本地的監聽+tns配置

 

select * from ab@dblink1-----再次查詢:報錯不一樣了;
                 *
ERROR at line 1:
ORA-02019: connection description for remote database not found

連接為遙遠的資料庫,連接未找到;

+++++

繼續配置,本地的tnsnames,ora文件,存放加入,遠程的tns配置文件;(有自己的,但是沒有遠程的tns配置文件,發不出去)

 

===在本地: tnsnames.ora文件中加入,遠程,遠端的tnsnames.ora配置文件信息,保存退出;

 

--查詢驗證: sqlplus sys/oracle@yang1 as sysdba

SQL> select instance_name from v$Instance;---查詢資料庫實例

INSTANCE_NAME ---------------- jx

SQL> host echo $ORACLE_SID +ASM1      --查詢本地的sid,實例啥

 ---本地環境是,使用ASM存儲的單節點,因此,tnsname,listener都是grid用戶管理的;

 

 ---代表什麼:可以通過tnsnames.ora文件,去訪問其他資料庫,登陸其它資料庫;

select * from ab@dblink1  ==SYS用戶,可以使用,abc用戶卻不能使用

58 rows selected.

SQL> select owner,object_name from dba_objects where object_type='DATABASE LINK';

OWNER -------------------------------------------OBJECT_NAME ----------------------------------

SYS DBLINK1           ---發現搞錯了

PUBLIC QQQ  -

---------------------------------------------------------------DBLINK創建了一個私有,其它人不能用---------再加個公有的唄

grant create public database link to abc;  --授予創建public dblink許可權

conn abc/abc;

 create  public  database link yuan1 connect to yang identified by y using '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.54.20)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=jx)))';

 select * from ab@yuan1 ====OK---查詢驗證OK

 

SQL>  select * from user_sys_privs where privilege like upper('%DATABASE LINK%');----查詢當前用戶對DBLINK的許可權

USERNAME用戶擁有著 ----------- PRIVILEGE許可權查詢 ---------------- ADMIN是否能聯級授予(能否給人錢,有決定權)

ABC          CREATE PUBLIC DATABASE LINK                                    NO

 

SQL> select * from cat@yuan1;

TABLE_NAME --------------------------- TABLE_TYPE -----------------

AB TABLE

ABCDE TABLE

ABCDEFAEFEF TABLE     

---回到最初:  表太長,建立了同義詞,本地還能使用遠程的公共同義詞進行查詢嗎?

select * from a@yuan1;            ==public  可以查詢

 

select * from b@yuan1;       ====私有也可以,證明:遠端遠程一樣可以只有能看表,就能通過同義詞查詢

 

 

 

 

 

======================================================================================

 dblink如何查詢:

select owner,object_name from dba_objects where object_type='DATABASE LINK';

SYS DBLINK1

PUBLIC QQQ

PUBLIC YUAN1

 

select * from dba_db_links;---可以查詢完整的DBLINK 信息

PUBLIC               YUAN1                YANG                 (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.54.20)(PORT=1521)))(CONNEC 19-OCT-17
                                                               T_DATA=(SERVICE_NAME=jx)))

dblink如何刪除:

drop dblink qqq;

select * from dba_db_links where db_link='QQQ';

YANG

ORA-01031: insufficient privileges  ---公共的DBLINK,即使是擁有著也沒有許可權刪除

SQL> show user USER is "YANG" SQL> conn / as sysdba Connected.

SQL> drop public database link qqq; =========公共的DBLINK,使用SYS用戶刪除

 

grant create database link to abc;

 create   database link si1 connect to yang identified by y using '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.54.20)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=jx)))';

drop database link si1;       ===================私有的DBLINK,自己的用戶可以刪除

drop database link abc.si1 ========================SYS找不到私有的DBLINK,藏起來了
                   *
ERROR at line 1:
ORA-02024: database link not found===咋整;

大神有方法,此處抄襲:http://blog.itpub.net/29337971/viewspace-1129917/ --我沒成功,先留著以後在學

SQL> select owner||'.'||db_link from dba_db_links where db_link not like '%OGG%';

OWNER||'.'||DB_LINK -------------------------------------------------------------------------------- SYS.DBLINK1

PUBLIC.YUAN1

ABC.SI1

 

小結:共有,私有的DBLINK與同義詞一樣,創建的許可權分開的;

其次:刪除共有的dblink,sys用戶,私有 誰創建的,誰刪除;SYS找不著對象

 

 

刪除DBLINK:能否禁用呢?

資料庫級別禁止功能:

SQL> alter system set open_links=0 scope=spfile;

ORA-02020: too many database links in use==資料庫使用過多的DBLINK

SQL> alter system set open_links=4 scope=spfile;

SQL> startup force;

 

---如何禁止單個呢?

dba_db_links

select * from dba_db_links;

SQL> select count(*) from cat@yuan1;

  COUNT(*) ----------          6

沒實現成功!!!!!!!!!!!!!!!!!!

alter session close database link 'dblink_name'

 

 

---------------------------------------------片外----------------------------------------------------

同義詞--刪除同義詞依托的對象後,同義詞是什麼狀態:

select object_name,object_type,status from user_objects where object_name='YANG' or object_name='ABCDEFAEFEF';

ABCDEFAEFEF               TABLE               VALID

drop table ABCDEFAEFEF ;

select * from dba_synonyms where table_name='ABCDEFAEFEF';

select * from a;

ORA-00980: synonym translation is no longer valid  同義詞長時間不是有效的

 

 

對象、私有同義詞、公共同義詞是否可以存在三者同名的情況?

對象與公司同義詞相等,對象優先順序最高;

共有私有同義詞一樣:

SQL> create table abcdefaefef as select * from hr.employees;    ===公私同義詞不一樣,衝突,提升名稱已被使用;

SQL> create synonym a for abcdefaefef;

create public synonym a for yang.abcdefaefef
                       *
ERROR at line 1:
ORA-00955: name is already used by an existing object


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、alwayson概念 “可用性組” 針對一組離散的用戶資料庫(稱為“可用性資料庫” ,它們共同實現故障轉移)支持故障轉移環境。 一個可用性組支持一組主資料庫以及一至八組對應的輔助資料庫(包括一個主副本和兩個同步提交輔助副本)。 輔助資料庫不是備份,應繼續定期備份您的資料庫及其事務日誌。 每組可用 ...
  • InnoDB的MVCC,是通過在每行記錄後面保存三個隱藏的列來實現的其中的兩個列一個保存了行的創建時間,一個保存行的過期時間(或刪除時間)。當然存儲的並不是實際的時間值,而是系統版本號(system version number): 1、DB_TRX_ID :6位元組的事務ID,每處理一個事務,其值自 ...
  • SQL 基本語法 表庫操作 創建表 創建主鍵約束 刪除主鍵 主鍵自動增長 主鍵欄位後加auto_increment(只適用MySQL) 查看所有的庫 使用庫 查看所有的表 查看表的結構 修改表名 刪除表 數據操作 插入數據 更新數據 刪除數據 查詢操作 查詢並且去掉重覆記錄 別名查詢 while條件 ...
  • hive的join查詢 語法 實例: left join/right join 左查詢就是不管能不能匹配到右邊的表,都會輸出左面的表,未匹配到的項目為空 | name | age | | | | | wang | 13 | | zhao | 14 | | name | score | | | | | ...
  • hive遇到FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask錯誤 起因 使用hive做join查詢,a表十幾萬數據,b表1kw多點數據,結果跑起來就是跑一半返回錯誤,提示如 ...
  • mysql load數據第一列丟失 問題描述 MySQL表的結構如下: txt文件的格式如下,以tab作為劃分: 使用load導入數據,命令如下: 查詢數據發現,第一列的uuid都是phone_number,而phone_number這一列都是空的,也就是說uuid這一列全部丟失了 原因定位 找到了 ...
  • spark快速上手 前言 基於Spark 2.1版本 僅僅是快速上手,沒有深究細節 主要參考是官方文檔 代碼均為官方文檔中代碼,語言為Scala 進入spark shell 終端輸入 ,進入的是Scala環境的終端,也可以輸入 進入Python環境的終端 創建一個SparkSession 創建Dat ...
  • Spark中的IsNotNull函數怎麼用 在 "這裡" 看到的這個函數,就是判斷是否為空,但是開始不知道怎麼用,後來找到了,要在View中用,也就是SparkSQL中。如下: PS:開始谷歌了半天沒找到,結果百度了一番找到了答案… ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...