以root用户身份登录时,为什么没有所有权限?

时间:2018-07-20 12:44:21

标签: mysql google-cloud-platform

这是一个GCP MySQL云实例MySQL 2nd Gen 5.7。 Google已安装并配置了它。

我以root用户身份登录: enter image description here

运行脚本创建架构,表和视图时,出现此错误:

Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this operation

以下是分配给root的权限: enter image description here

以下是失败的SQL,采用存储过程的形式:

CREATE DEFINER=`root`@`%` PROCEDURE `CreateFullCoverageTestCase`()
BEGIN
    -- Create all the elements of the Full Coverage Test Case

    -- *********************
    -- Schema Store
    -- *********************
    Begin
        DROP Schema if exists `store`;
    END;
    BEGIN
        CREATE SCHEMA `store` ;

        CREATE TABLE `store`.`city` (
          `CityID` int(11) NOT NULL AUTO_INCREMENT,
          `City` varchar(45) NOT NULL,
          PRIMARY KEY (`CityID`),
          UNIQUE KEY `City_UNIQUE` (`City`));
        INSERT INTO store.city (City) VALUES('Cincinnati');
        INSERT INTO store.city (City) VALUES('Columbus');
        INSERT INTO store.city (City) VALUES('Kokomo');
        INSERT INTO store.city (City) VALUES('Hillsdale');
        INSERT INTO store.city (City) VALUES('Lexington');
        INSERT INTO store.city (City) VALUES('Oxford');

        CREATE TABLE `store`.`state` (
          `StateID` int(11)  NOT NULL AUTO_INCREMENT,
          `State` varchar(45) NOT NULL,
          `StateAbbreviation` varchar(2) NOT NULL,
          PRIMARY KEY (`StateID`),
          UNIQUE KEY `StateAbbreviation_UNIQUE` (`StateAbbreviation`),
          UNIQUE KEY `State_UNIQUE` (`State`),
          UNIQUE KEY `StateID_UNIQUE` (`StateID`));
        INSERT INTO store.state (State, StateAbbreviation) VALUES('Indiana', 'IN');
        INSERT INTO store.state (State, StateAbbreviation) VALUES('Kentucky', 'KY');
        INSERT INTO store.state (State, StateAbbreviation) VALUES('Michigan', 'MI');
        INSERT INTO store.state (State, StateAbbreviation) VALUES('Ohio', 'OH');

        CREATE TABLE `store`.`store` (
          `StoreID` int(11)  NOT NULL AUTO_INCREMENT,
          `StoreNumber` varchar(10) NOT NULL,
          `AddressLine1` varchar(45) NOT NULL,
          `AddressLine2` varchar(45) DEFAULT NULL,
          `CityID` int(11) NOT NULL,
          `StateID` int(11) NOT NULL,
          `ZipCode` varchar(10) NOT NULL,
          PRIMARY KEY (`StoreID`),
          UNIQUE KEY `StoreNumber_UNIQUE` (`StoreNumber`));
        INSERT INTO store.store (StoreNumber, AddressLine1, CityID, StateID, ZipCode) VALUES('S000000001', '111 Main', 1, 4, '45255-1321');
        INSERT INTO store.store (StoreNumber, AddressLine1, CityID, StateID, ZipCode) VALUES('S000000002', '817 Nordyke', 1, 4, '45103-0000');
        INSERT INTO store.store (StoreNumber, AddressLine1, CityID, StateID, ZipCode) VALUES('S000000003', '123 Green', 6, 4, '45056-0000');

    End;
    -- *********************
    -- Schema HR (Human Resources)
    -- *********************
    BEGIN
        DROP Schema if exists `hr`;
    END;
    BEGIN
        CREATE SCHEMA `hr` ;
        CREATE TABLE `hr`.`employee` (
          `EmployeeID` INT NOT NULL AUTO_INCREMENT,
          `LastName` VARCHAR(45) NOT NULL,
          `FirstName` VARCHAR(45) NOT NULL,
          `EmployeeNumber` VARCHAR(10) NOT NULL,
          `AddressLine1` VARCHAR(45) NOT NULL,
          `AddressLine2` VARCHAR(45) NULL,
          `City` VARCHAR(45) NOT NULL,
          `State` VARCHAR(2) NOT NULL,
          `ZipCode` VARCHAR(10) NOT NULL,
          PRIMARY KEY (`EmployeeID`),
          UNIQUE INDEX `EmployeeNumber_UNIQUE` (`EmployeeNumber` ASC));
        INSERT INTO hr.employee (lastName, firstName, EmployeeNumber, AddressLine1, City, State, ZipCode) VALUES('Cheaney', 'Calbert', 'E000000001', '17th Street', 'Bloomington', 'IN', '47405');
        INSERT INTO hr.employee (lastName, firstName, EmployeeNumber, AddressLine1, City, State, ZipCode) VALUES('Reynolds', 'Chris', 'E000000002', 'Fee Street', 'Bloomington', 'IN', '47405');

    END;
    -- *********************
    -- Products for sale
    -- *********************
    BEGIN
        DROP Schema if exists `product`;
    END;
    BEGIN
        CREATE SCHEMA `product` ;
        CREATE TABLE `product`.`manufacturer` (
          `ManufacturerID` int(11) NOT NULL AUTO_INCREMENT,
          `Manufacturer` varchar(45) NOT NULL,
          `Comment` varchar(1000) DEFAULT NULL,
          `AddressLine01` varchar(45) DEFAULT NULL,
          `AddressLine02` varchar(45) DEFAULT NULL,
          `City` varchar(45) DEFAULT NULL,
          `State` varchar(45) DEFAULT NULL,
          `ZipCode` varchar(10) DEFAULT NULL,
          `Phone` varchar(13) DEFAULT NULL,
          `Manufacturercol` varchar(45) DEFAULT NULL,
          PRIMARY KEY (`ManufacturerID`),
          UNIQUE KEY `Manufacturer_UNIQUE` (`Manufacturer`));
        INSERT INTO product.manufacturer (Manufacturer) VALUES('Smuckers');
        INSERT INTO product.manufacturer (Manufacturer) VALUES('Dannon');
        INSERT INTO product.manufacturer (Manufacturer) VALUES('Kellogs');
        INSERT INTO product.manufacturer (Manufacturer) VALUES('Pepsi');

        CREATE TABLE `product`.`unit` (
          `UnitID` INT NOT NULL AUTO_INCREMENT,
          `Unit` VARCHAR(45) NOT NULL,
          PRIMARY KEY (`UnitID`),
          UNIQUE INDEX `Unit_UNIQUE` (`Unit` ASC));
        INSERT INTO product.unit(Unit) VALUES('Box');
        INSERT INTO product.unit(Unit) VALUES('Bag');
        INSERT INTO product.unit(Unit) VALUES('Carton');
        INSERT INTO product.unit(Unit) VALUES('Jar');
        INSERT INTO product.unit(Unit) VALUES('Tube');
        INSERT INTO product.unit(Unit) VALUES('Case');
        INSERT INTO product.unit(Unit) VALUES('Cup');

        CREATE TABLE `product`.`product` (
          `ProductID` int(11) NOT NULL AUTO_INCREMENT,
          `SKU` varchar(45) NOT NULL,
          `Description` varchar(45) NOT NULL,
          `ManufacturerID` int(11) NOT NULL,
          `UnitCost` decimal(10,3) DEFAULT '0.000',
          `UnitPrice` decimal(10,3) DEFAULT '0.000',
          `UnitID` int(11) DEFAULT NULL,
          PRIMARY KEY (`ProductID`),
          UNIQUE KEY `SKU_UNIQUE` (`SKU`),
          UNIQUE KEY `Description_UNIQUE` (`Description`),
          KEY `ManufacturerID_idx` (`ManufacturerID`),
          KEY `UnitID_idx` (`UnitID`),
          CONSTRAINT `ManufacturerID` FOREIGN KEY (`ManufacturerID`) REFERENCES `manufacturer` (`ManufacturerID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
          CONSTRAINT `UnitID` FOREIGN KEY (`UnitID`) REFERENCES `unit` (`UnitID`) ON DELETE NO ACTION ON UPDATE NO ACTION
        );

        INSERT INTO product.product (SKU, Description, ManufacturerID, UnitCost, UnitPrice, UnitID) VALUES('P000000001', 'Blueberry Jam',                   1,  .50, 1.00, 4);
        INSERT INTO product.product (SKU, Description, ManufacturerID, UnitCost, UnitPrice, UnitID) VALUES('P000000002', 'Coffee Yogurt',                   2, 1.00, 2.00, 7);
        INSERT INTO product.product (SKU, Description, ManufacturerID, UnitCost, UnitPrice, UnitID) VALUES('P000000003', '12 Individual Boxes Corn Flakes', 3, 1.00, 5.00, 6);
        INSERT INTO product.product (SKU, Description, ManufacturerID, UnitCost, UnitPrice, UnitID) VALUES('P000000004', 'Box Corn Flakes',                 3, 1.00, 5.00, 1);

    END;
    -- *********************
    -- Loyalty (Customers)
    -- *********************
    BEGIN
        DROP schema if exists `loyalty`;
    END;
    BEGIN
        CREATE SCHEMA `loyalty`;
        CREATE TABLE `loyalty`.`loyalty` (
          `LoyaltyID` INT NOT NULL AUTO_INCREMENT,
          `LoyaltyNumber` VARCHAR(10) NOT NULL,
          `LastName` VARCHAR(45) NULL,
          `FirstName` VARCHAR(45) NULL,
          `AddressLine1` VARCHAR(45) NULL,
          `AddressLine2` VARCHAR(45) NULL,
          `City` VARCHAR(45) NULL,
          `State` VARCHAR(2) NULL,
          `ZipCode` INT NULL,
          PRIMARY KEY (`LoyaltyID`),
          UNIQUE INDEX `LoyaltyNumber_UNIQUE` (`LoyaltyNumber` ASC));        
        INSERT INTO loyalty.loyalty (LoyaltyID, LoyaltyNumber, LastName)            VALUES(1, 'L000000001', 'Smith');
        INSERT INTO loyalty.loyalty (LoyaltyID, LoyaltyNumber)                      VALUES(2, 'L000000002');
        INSERT INTO loyalty.loyalty (LoyaltyID, LoyaltyNumber)                      VALUES(3, 'L000000003');
        INSERT INTO loyalty.loyalty (LoyaltyID, LoyaltyNumber, LastName, FirstName) VALUES(4, 'L000000004', 'Knight', 'Robert');

    END;
    -- *********************
    -- Reconciled Schema 
    -- *********************
    BEGIN
        DROP Schema if exists `reconciled`;
    END;
    BEGIN
        CREATE SCHEMA `reconciled` ;
        CREATE TABLE `reconciled`.`sale` (
          `saleID` int(11) NOT NULL AUTO_INCREMENT,
          `EmployeeFirstName` varchar(45) DEFAULT NULL,
          `EmployeeLastName` varchar(45) DEFAULT NULL,
          `ProductDescription` varchar(45) DEFAULT NULL,
          `Unit` varchar(45) DEFAULT NULL,
          `SKU` varchar(45) DEFAULT NULL,
          `Qty` int(11) DEFAULT NULL,
          `UnitCost` decimal(10,3) DEFAULT NULL,
          `UnitPrice` decimal(10,3) DEFAULT NULL,
          `Manufacturer` varchar(45) DEFAULT NULL,
          `EmployeeNumber` varchar(45) DEFAULT NULL COMMENT 'The employee who handled the transaction',
          `LoyaltyNumber` varchar(45) DEFAULT NULL,
          `StoreNumber` varchar(45) DEFAULT NULL,
          `DateOfTransaction` date DEFAULT NULL,
          `TimeOfTransaction` time DEFAULT NULL,
          `DateOfTransactionString` varchar(45) DEFAULT NULL,
          `TimeOfTransactionString` varchar(45) DEFAULT NULL,
          `WeekdayOfTransaction` int(11) DEFAULT NULL,
          `MonthOfTransaction` int(11) DEFAULT NULL,
          `YearOfTransaction` int(11) DEFAULT NULL,
          `WeekdayNameOfTransaction` varchar(45) DEFAULT NULL,
          `MonthNameOfTransaction` varchar(45) DEFAULT NULL,
          `TotalPrice` decimal(10,3) DEFAULT NULL,
          `ZipCode` varchar(10) DEFAULT NULL,
          PRIMARY KEY (`saleID`)
        ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

        CREATE TABLE `reconciled`.`weather` (
          `WeatherID` int(11) NOT NULL AUTO_INCREMENT,
          `DateStamp` date DEFAULT NULL,
          `ZipCode` varchar(10) DEFAULT NULL,
          `Temperature` int(11) DEFAULT NULL,
          `MonthName` varchar(45) DEFAULT NULL,
          `YearNumber` int(11) DEFAULT NULL,
          `DayName` varchar(45) DEFAULT NULL,
          `MonthNumber` int(11) DEFAULT NULL,
          `DayNumber` int(11) DEFAULT NULL,
          PRIMARY KEY (`WeatherID`)
        ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

    END;
     -- *********************
    -- Aggregated schema for the data warehouse
    -- *********************
    BEGIN
        DROP Schema if exists dw;
        CREATE SCHEMA `dw` ;
        CREATE TABLE `dw`.`salesqtybyproductandstore` (
          `SalesByProductAndStoreID` int(11) NOT NULL AUTO_INCREMENT,
          `SKU` varchar(45) NOT NULL,
          `StoreNumber` varchar(45) NOT NULL,
          `ProductDescription` varchar(45) DEFAULT NULL,
          `Monday` int(11) DEFAULT '0',
          `Tuesday` int(11) DEFAULT '0',
          `Wednesday` int(11) DEFAULT '0',
          `Thursday` int(11) DEFAULT '0',
          `Friday` int(11) DEFAULT '0',
          `Saturday` int(11) DEFAULT '0',
          `Sunday` int(11) DEFAULT '0',
          PRIMARY KEY (`SalesByProductAndStoreID`),
          UNIQUE KEY `SKU_UNIQUE` (`SKU`,`StoreNumber`)
        );
    END; 
    BEGIN
        CREATE TABLE `dw`.`monthlysalesqtybyproductandstore` (
          `monthlysalesqtybyproductandstoreID` int(11) NOT NULL AUTO_INCREMENT,
          `SKU` varchar(45) NOT NULL,
          `StoreNumber` varchar(45) NOT NULL,
          `ProductDescription` varchar(45) DEFAULT NULL,
          `January` int(11) DEFAULT '0',
          `February` int(11) DEFAULT '0',
          `March` int(11) DEFAULT '0',
          `April` int(11) DEFAULT '0',
          `May` int(11) DEFAULT '0',
          `June` int(11) DEFAULT '0',
          `July` int(11) DEFAULT '0',
          `August` int(11) DEFAULT '0',
          `September` int(11) DEFAULT '0',
          `October` int(11) DEFAULT '0',
          `November` int(11) DEFAULT '0',
          `December` int(11) DEFAULT '0',
          PRIMARY KEY (`monthlysalesqtybyproductandstoreID`),
          UNIQUE KEY `SKU_UNIQUE` (`SKU`,`StoreNumber`)
        ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

        CREATE TABLE `dw`.`weeklysalesqtybyproductandstore` (
          `WeeklysalesqtybyproductandstoreID` int(11) NOT NULL AUTO_INCREMENT,
          `SKU` varchar(45) NOT NULL,
          `StoreNumber` varchar(45) NOT NULL,
          `ProductDescription` varchar(45) DEFAULT NULL,
          `Monday` int(11) DEFAULT '0',
          `Tuesday` int(11) DEFAULT '0',
          `Wednesday` int(11) DEFAULT '0',
          `Thursday` int(11) DEFAULT '0',
          `Friday` int(11) DEFAULT '0',
          `Saturday` int(11) DEFAULT '0',
          `Sunday` int(11) DEFAULT '0',
          PRIMARY KEY (`WeeklysalesqtybyproductandstoreID`),
          UNIQUE KEY `SKU_UNIQUE` (`SKU`,`StoreNumber`)
        ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

        CREATE TABLE `dw`.`storesalesbytemperature` (
          `StoreSalesByTemperatureID` INT NOT NULL AUTO_INCREMENT,
          `StoreNumber` VARCHAR(45) NULL,
          `Under0` DECIMAL(10,2) NULL,
          `0To20` DECIMAL(10,2) NULL,
          `21To30` DECIMAL(10,2) NULL,
          `31To40` DECIMAL(10,2) NULL,
          `41To50` DECIMAL(10,2) NULL,
          `51To60` DECIMAL(10,2) NULL,
          `61To70` DECIMAL(10,2) NULL,
          `71To80` DECIMAL(10,2) NULL,
          `81To90` DECIMAL(10,2) NULL,
          `Over90` DECIMAL(10,2) NULL,
          `StoreSalesByTemperaturecol` VARCHAR(45) NULL,
          PRIMARY KEY (`StoreSalesByTemperatureID`),
          INDEX `Unique` (`StoreNumber` ASC));
    END;
    BEGIN
        DROP Schema if exists icecream;
        CREATE SCHEMA `icecream`;

        CREATE TABLE `icecream`.`flavor` (
          `FlavorID` INT NOT NULL AUTO_INCREMENT,
          `Flavor` VARCHAR(45) NULL,
          PRIMARY KEY (`FlavorID`),
          UNIQUE INDEX `Flavor_UNIQUE` (`Flavor` ASC));

        CREATE TABLE `icecream`.`container` (
          `ContainerID` INT NOT NULL AUTO_INCREMENT,
          `Container` VARCHAR(45) NULL,
          PRIMARY KEY (`ContainerID`),
          UNIQUE INDEX `Container_UNIQUE` (`Container` ASC));   

        CREATE TABLE `icecream`.`icecream` (
          `IceCreamID` int(11) NOT NULL AUTO_INCREMENT,
          `FlavorID` int(11) DEFAULT NULL,
          `ContainerID` int(11) DEFAULT NULL,
          `SKU` varchar(45) DEFAULT NULL,
          PRIMARY KEY (`IceCreamID`),
          UNIQUE KEY `Unique` (`ContainerID`,`FlavorID`),
          UNIQUE KEY `SKU_UNIQUE` (`SKU`),
          CONSTRAINT `Container` FOREIGN KEY (`ContainerID`) REFERENCES `icecream`.`container` (`ContainerID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
          CONSTRAINT `Flavor` FOREIGN KEY (`FlavorID`) REFERENCES `icecream`.`flavor` (`FlavorID`) ON DELETE NO ACTION ON UPDATE NO ACTION
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

        INSERT INTO icecream.flavor (flavor)            VALUES('Chocolate');
        INSERT INTO icecream.flavor (flavor)            VALUES('Vanilla');
        INSERT INTO icecream.flavor (flavor)            VALUES('Strawberry');
        INSERT INTO icecream.flavor (flavor)            VALUES('Raspberry Chocolate Chip');
        INSERT INTO icecream.flavor (flavor)            VALUES('Blueberry');

        INSERT INTO icecream.container (Container)      VALUES('cup');
        INSERT INTO icecream.container (Container)      VALUES('pint');
        INSERT INTO icecream.container (Container)      VALUES('quart');
        INSERT INTO icecream.container (Container)      VALUES('half gallon');
        INSERT INTO icecream.container (Container)      VALUES('gallon');

        INSERT INTO icecream.icecream (flavorID, containerID, SKU)      VALUES(1, 2, 'I000000001');
        INSERT INTO icecream.icecream (flavorID, containerID, SKU)      VALUES(2, 2, 'I000000002');
        INSERT INTO icecream.icecream (flavorID, containerID, SKU)      VALUES(3, 2, 'I000000003');   
        INSERT INTO icecream.icecream (flavorID, containerID, SKU)      VALUES(1, 3, 'I000000004');
        INSERT INTO icecream.icecream (flavorID, containerID, SKU)      VALUES(2, 3, 'I000000005');
        INSERT INTO icecream.icecream (flavorID, containerID, SKU)      VALUES(3, 3, 'I000000006');

        INSERT INTO icecream.icecream (flavorID, containerID)      VALUES(4, 1);

    END;
        -- *********************
    -- Schema Sales
    -- *********************
    BEGIN
        DROP Schema if exists `weather`;
    END;
    BEGIN
        CREATE SCHEMA `weather` ;
        CREATE TABLE `weather`.`weather` (
          `weatherText` varchar(100) DEFAULT NULL
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

        INSERT INTO weather.weather (weatherText)       VALUES('2018/01/01 00:00:00.0000,45255,10');
        INSERT INTO weather.weather (weatherText)       VALUES('2018/01/02 00:00:00.0000,45255,12');
        INSERT INTO weather.weather (weatherText)       VALUES('2018/01/03 00:00:00.0000,45255,14');
        INSERT INTO weather.weather (weatherText)       VALUES('2018/01/04 00:00:00.0000,45255,16');
        INSERT INTO weather.weather (weatherText)       VALUES('2018/01/01 00:00:00.0000,45103,15');
        INSERT INTO weather.weather (weatherText)       VALUES('2018/01/02 00:00:00.0000,45103,17');
        INSERT INTO weather.weather (weatherText)       VALUES('2018/01/03 00:00:00.0000,45103,19');
        INSERT INTO weather.weather (weatherText)       VALUES('2018/01/04 00:00:00.0000,45103,21');

    END;    

    -- *********************
    -- Schema Sales
    -- *********************
    BEGIN
        DROP Schema if exists `sales`;
    END;
    BEGIN
        CREATE SCHEMA `sales` ;
        CREATE TABLE `sales`.`transaction` (
          `TransactionID` int(11) NOT NULL AUTO_INCREMENT,
          `DateTimeOfTransaction` datetime NOT NULL,
          `LoyaltyNumber` varchar(10) DEFAULT NULL,
          `StoreNumber` varchar(10) NOT NULL,
          `EmployeeNumber` varchar(10) NOT NULL,
          PRIMARY KEY (`TransactionID`),
          UNIQUE KEY `NaturalKey` (`DateTimeOfTransaction`,`LoyaltyNumber`,`StoreNumber`,`EmployeeNumber`)
        ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
    END;
    BEGIN
        INSERT INTO `sales`.`transaction` (TransactionID, DateTimeOfTransaction, LoyaltyNumber, StoreNumber, EmployeeNumber) VALUES(1, '2018-01-01 15:00:00', 'L000000001', 'S000000001', 'E000000001');
        INSERT INTO `sales`.`transaction` (TransactionID, DateTimeOfTransaction, LoyaltyNumber, StoreNumber, EmployeeNumber) VALUES(2, '2018-02-02 15:00:00', 'L000000002', 'S000000002', 'E000000002');
        INSERT INTO `sales`.`transaction` (TransactionID, DateTimeOfTransaction, LoyaltyNumber, StoreNumber, EmployeeNumber) VALUES(3, '2018-02-07 16:00:00', 'L000000002', 'S000000002', 'E000000002');
        INSERT INTO `sales`.`transaction` (TransactionID, DateTimeOfTransaction, LoyaltyNumber, StoreNumber, EmployeeNumber) VALUES(4, '2018-02-09 16:16:00', 'L000000002', 'S000000002', 'E000000002');
    END;
    BEGIN
          -- YYYY-MM-DD HH:MM:SS
        CREATE TABLE `sales`.`transactiondetail` (
          `TransactionDetailID` int(11) NOT NULL AUTO_INCREMENT,
          `TransactionID` int(11) NOT NULL,
          `SKU` varchar(45) NOT NULL,
          `Qty` int(11) NOT NULL,
          `TotalPrice` decimal(10,3) NOT NULL,
          `Comment` varchar(1000) DEFAULT NULL,
          PRIMARY KEY (`TransactionDetailID`),
          UNIQUE KEY `NaturalKey` (`TransactionID`,`SKU`),
          KEY `TransactionID_idx` (`TransactionID`),
          CONSTRAINT `TransactionID` FOREIGN KEY (`TransactionID`) REFERENCES `sales`.`transaction` (`TransactionID`) ON DELETE NO ACTION ON UPDATE NO ACTION);
    END;
    BEGIN
        INSERT INTO sales.transactiondetail (TransactionID, SKU, Qty, TotalPrice) VALUES(1, 'P000000001', 10, 100);
        INSERT INTO sales.transactiondetail (TransactionID, SKU, Qty, TotalPrice) VALUES(1, 'P000000002',  5,  25);

        INSERT INTO sales.transactiondetail (TransactionID, SKU, Qty, TotalPrice) VALUES(2, 'P000000001',  1, 100);
        INSERT INTO sales.transactiondetail (TransactionID, SKU, Qty, TotalPrice) VALUES(2, 'P000000002',  2,  25);
        INSERT INTO sales.transactiondetail (TransactionID, SKU, Qty, TotalPrice) VALUES(3, 'P000000002', 40,  40);

        INSERT INTO sales.transactiondetail (TransactionID, SKU, Qty, TotalPrice) VALUES(4, 'P000000002', 44,  44);

    END;

    BEGIN
        CREATE 
            ALGORITHM = UNDEFINED 
            DEFINER = `root`@`localhost` 
            SQL SECURITY DEFINER
        VIEW `reconciled`.`mapping` AS
            SELECT 
                `hr`.`employee`.`FirstName` AS `EmployeeFirstName`,
                `hr`.`employee`.`LastName` AS `EmployeeLastName`,
                `product`.`product`.`Description` AS `ProductDescription`,
                `product`.`unit`.`Unit` AS `Unit`,
                `product`.`product`.`SKU` AS `SKU`,
                `sales`.`transactiondetail`.`Qty` AS `Qty`,
                `product`.`product`.`UnitCost` AS `UnitCost`,
                `product`.`product`.`UnitPrice` AS `UnitPrice`,
                `product`.`manufacturer`.`Manufacturer` AS `Manufacturer`,
                `sales`.`transaction`.`EmployeeNumber` AS `EmployeeNumber`,
                `sales`.`transaction`.`LoyaltyNumber` AS `LoyaltyNumber`,
                `sales`.`transaction`.`StoreNumber` AS `StoreNumber`,
                `store`.`store`.`zipCode` as `ZipCode`,
                CAST(`sales`.`transaction`.`DateTimeOfTransaction`
                    AS DATE) AS `DateOfTransaction`,
                CAST(`sales`.`transaction`.`DateTimeOfTransaction`
                    AS TIME) AS `TimeOfTransaction`,
                CAST(CAST(`sales`.`transaction`.`DateTimeOfTransaction`
                        AS DATE)
                    AS CHAR CHARSET UTF8) AS `DateOfTransactionString`,
                CAST(CAST(`sales`.`transaction`.`DateTimeOfTransaction`
                        AS TIME)
                    AS CHAR CHARSET UTF8) AS `TimeOfTransactionString`,
                WEEKDAY(`sales`.`transaction`.`DateTimeOfTransaction`) AS `WeekdayOfTransaction`,
                MONTH(`sales`.`transaction`.`DateTimeOfTransaction`) AS `MonthOfTransaction`,
                YEAR(`sales`.`transaction`.`DateTimeOfTransaction`) AS `YearOfTransaction`,
                DAYNAME(`sales`.`transaction`.`DateTimeOfTransaction`) AS `WeekdayNameOfTransaction`,
                MONTHNAME(`sales`.`transaction`.`DateTimeOfTransaction`) AS `MonthNameOfTransaction`,
                `sales`.`transactiondetail`.`TotalPrice` AS `TotalPrice`
            FROM
                ((((((`sales`.`transaction`
                JOIN `sales`.`transactiondetail` ON ((`sales`.`transaction`.`TransactionID` = `sales`.`transactiondetail`.`TransactionID`)))
                JOIN `hr`.`employee` ON ((`hr`.`employee`.`EmployeeNumber` = `sales`.`transaction`.`EmployeeNumber`)))
                JOIN `product`.`product` ON ((`product`.`product`.`SKU` = `sales`.`transactiondetail`.`SKU`)))
                JOIN `product`.`unit` ON ((`product`.`product`.`UnitID` = `product`.`unit`.`UnitID`)))
                JOIN `store`.`store` ON ((`store`.`store`.`StoreNumber` = `sales`.`transaction`.`StoreNumber`)))
                JOIN `product`.`manufacturer` ON ((`product`.`product`.`ManufacturerID` = `product`.`manufacturer`.`ManufacturerID`))) ;   

            CREATE TABLE `reconciled`.`icecream` (
              `icecreamid` int(11) NOT NULL AUTO_INCREMENT,
              `flavor` varchar(45) DEFAULT NULL,
              `container` varchar(45) DEFAULT NULL,
              `sku` varchar(45) DEFAULT NULL,
              PRIMARY KEY (`icecreamid`),
              UNIQUE KEY `Unique` (`flavor`,`container`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    END;
    BEGIN
        CREATE VIEW `reconciled`.`totalSalesByStoreAndTemperature` AS
        SELECT StoreNumber, temperature, SUM(TotalPrice) as `SumOfTotalPrice`
        FROM reconciled.sale inner join reconciled.weather on Substring(reconciled.sale.zipCode,1,5) = substring(reconciled.weather.zipCode,1,5)
        Group By StoreNumber, temperature
        ORDER BY StoreNumber, Temperature;
    END;

END

3 个答案:

答案 0 :(得分:1)

只想添加此问题的根本原因。

Cloud SQL当前仅限根据GCP documentation授予SUPER和FILE特权,因此不能将它们分配给任何用户,包括root。

根据MySQL 5.7 documentation,DEFINER属性要求用户具有SUPER特权。

上面的情况是导致错误的原因,当您取出DEFINER语句时,这种情况会起作用。

总之,任何其他需要SUPER o FILE特权的操作最有可能失败,并显示错误消息“访问被拒绝;您需要(至少一种)此操作的SUPER特权”。

答案 1 :(得分:0)

在创建视图reconciledmapping时,我删除了DEFINER子句。 这消除了我执行SP时的错误。

这不是SP创建脚本的DEFINER子句,而是SP本身中的DEFINER子句。

答案 2 :(得分:0)

根据我在AWS RDS的经验,您没有获得SUPER特权,因为预配器引擎使用了那些特权。我非常确定这是在GCP中完成的。查询中的某些内容可能使MySQL认为它需要SUPER特权。发布出现错误的查询会很有帮助。

------- OP发布查询后更新----------

这是问题所在。 DEFINER。尝试CREATE PROCEDURE CreateFullCoverageTestCase()